2013-07-11 192 views
0

我很難優化我目前正在處理的項目的搜索功能。優化搜索:沒有結果返回短語搜索

假設以下查詢的搜索字詞爲Green Apple

有一些結果​​有的結果apple而不是詞組green apple因此,這句話會返回一個空的結果集。

我想知道是否有一個簡單的方法,基本上得到​​的所有結果和apple的所有結果,並將它們組合成一個結果集,沒有重複的代碼。

$query = "SELECT * FROM files WHERE keywords LIKE '%".$searchText."%' ORDER BY website, description ASC"; 
$results = mysqli_query($mysqli, $query); 

關鍵字字段例如

apple peach pear tomatoe

我明白任何建議!

非常感謝提前!

+2

[全文搜索](http://dev.mysql.com/doc/en/fulltext-search。 HTML)。 – eggyal

+0

你有沒有考慮過使用全文索引?然後你就可以使用全文搜索。 – Bjoern

+0

您想了解MySQL的全文搜索功能。此外,您應該舉例說明數據的外觀。爲什麼「關鍵字」有一個類似「青蘋果」的條目而不是兩行,一個是「green」,另一個是「蘋果」。 –

回答

2

要跟進我的意見,您的查詢應該是這樣的:

SELECT * FROM files WHERE 
MATCH(`keywords`) AGAINST('".$searchText."' IN BOOLEAN MODE) 
ORDER BY website, description ASC 

請記住,MATCH AGAINST要求對全文索引正在搜索的列。在這種情況下,您將進入files表的結構,並在keywords列上放置全文索引。在phpmyadmin中,它是一個單擊按鈕,它與編輯,放置,唯一,主要等位於同一區域。

+0

+1,感謝您的回覆!這工作得很好! :D但是,一個小問題,如果用戶搜索「蘋果」和「蘋果」是一個關鍵字,查詢將返回一個空集,任何想法如何解決這個問題? – AnchovyLegend

+0

您可以嘗試嘗試各種選項與價格匹配。布爾模式是典型的但不是必需的。我傾向於只在布爾模式中使用匹配,所以我不認爲我是其他選項的最佳權威 –

0

什麼這樣的事情:

$query = "SELECT * FROM files WHERE ('".$searchText."' LIKE concat('%',keywords,'%')) OR (keywords LIKE '%".$searchText."%') ORDER BY website, description ASC"; 
+0

這將做一個用戶搜索蘋果的技巧,蘋果是一個關鍵字 –