2013-02-17 59 views
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. 开始

换句话说,冠军最匹配的关键字第一。

+1

真的是你需要做一些阅读[全文搜索(http://dev.mysql.com/doc/refman/5.0/ en/fulltext-search.html)和相关性分数。 – 2013-02-17 17:13:27

+0

最好给你的mysql查询添加一个命令..并让PHP只是为了处理结果。 – Broncha 2013-02-17 17:14:11

回答

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 

这里是Fiddle

而且这里的结果:

TITLE    CNT 
How to start fire 4 
to fire start  3 
How to    2 
start    1 
+0

虽然这不是“实际”的方式来做到这一点,它仍然像一个魅力。它会阻止我直到我学习全文或其他东西。谢谢!这节省了我几个小时的时间。 – user2067005 2013-02-17 17:35:37

+0

@ user2067005 - 完全不同意。就我而言,我无法在客户端的数据库上实现全文搜索,所以这是我想到的解决方法。祝你好运! – sgeddes 2013-02-17 17:46:16

相关问题