2012-04-01 63 views
3

我正在開發一個Web應用程序,並且需要查詢幫助。我使用的全文,這是它是如何尋找:通過大部分找到的順序排列MY_SQL全文

SELECT id, name, city, state, country, date 
FROM events_search 
WHERE MATCH(name, city, state, country) 
AGAINST ('$str') 

正如你可以看到我使用一個包含名稱,城市,州和國家的指數,並與用戶輸入的字符串匹配它。該字符串可以包含我剛剛提到的字段的任意組合。所以我需要查詢數據庫,找到最相關的結果,然後顯示給用戶。到目前爲止,它運作良好,但並不完美。

例如:如果用戶進入邁阿密佛羅里達,前5個結果在邁阿密和佛羅里達其他城市。接下來的5場比賽在亞利桑那州的邁阿密(我不想展示這一場),之後我會在佛羅里達和邁阿密(佛羅里達)獲得更多的成績。所以我想要做的是確定已經找到更多次的字段,並顯示頂部有這個字段的結果。在這種情況下,這將是佛羅里達州,因爲70%的結果在佛羅里達州的州。

回答

0

SELECT條款中加入全文搜索,你會得到一個分數,MySQL認爲它有多相關。

SELECT 
id, 
name, 
city, 
state, 
country, 
date, 
MATCH(name, city, state, country) AGAINST ('$str') AS relevancy 
FROM 
events_search 
WHERE 
MATCH(name, city, state, country) AGAINST ('$str') 
ORDER BY relevancy DESC 

這不會使查詢變慢,優化器會檢查它是兩次相同的搜索條件。

隨着ORDER BY條款你的「邁阿密亞利桑那」應該比「邁阿密(佛羅里達州)」晚。

相關問題