0

我需要 php 来首先显示数据库中结果最多的结果。

我有:

foreach($keywords as $key=>$keyword) {
      $where .= "`title` LIKE '%$keyword%'";
      if ($key != ($total_keywords - 1)) {
        $where .= " OR ";
      }
    }


$results = "SELECT * FROM topics WHERE $where";

所以如果有人在搜索

《如何生火》

它会显示

  1. 如何开始火
  2. 开火
  3. 如何
  4. 开始

换句话说,最匹配关键字的标题优先。

4

1 回答 1

0

我之前也遇到过类似的问题,全文搜索不是一个选项,虽然这是一种慢得多的方法,但它似乎很适合我的需求。基本上,UNION您的每个结果都像这样并用于COUNT计算结果的数量:

SELECT Title, COUNT(*) as cnt
FROM (
  SELECT * FROM Topics WHERE Title LIKE '%How%'
  UNION ALL
  SELECT * FROM Topics WHERE Title LIKE '%to%'
  UNION ALL
  SELECT * FROM Topics WHERE Title LIKE '%start%'
  UNION ALL
  SELECT * FROM Topics WHERE Title LIKE '%fire%'
  ) t
GROUP BY Title
ORDER BY 2 DESC

这是小提琴

结果如下:

TITLE              CNT
How to start fire  4
to fire start      3
How to             2
start              1
于 2013-02-17T17:20:37.543 回答