2013-02-17 36 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

相關問題