2012-01-29 47 views
0
$qstring = "SELECT titulo as value, id FROM blogs WHERE titulo LIKE '%".$term."%'   LIMIT 5"; 
$qstring = "SELECT titulo as value, id FROM blogs WHERE MATCH(titulo) AGAINST ('.$term.') LIMIT 5"; 

第一個將返回結果,但沒有真正涉及到查詢比賽(行)對(「文」)不會返回結果

第二個將返回:

Can't find FULLTEXT index matching the column list 

爲什麼呢?

回答

0

校驗值應該在的情況下,必須大於3 FULLTEXT索引搜索,否則返回null

要索引的單詞的最小和最大長度由系統變量ft_min_word_lenft_max_word_len定義。默認的最小值是四個字符。如果你改變了任何一個值,你必須重建你的FULLTEXT索引。例如,如果您希望可以搜索三個字符的單詞,則可以通過將以下行放在選項文件中來設置ft_min_word_len變量:

0

match()只適用於其上有FULLTEXT的字段,正如錯誤信息所示。您必須這樣做:

ALTER TABLE blogs ADD FULLTEXT INDEX tituolo_ft (titulo); 

然後才能在該字段上使用全文操作。

+0

因此,我可以提高LIKE結果質量嗎? – 2012-01-29 02:16:14

+0

取決於您要搜索的內容。全文索引具有較高的維護開銷,但至少可以使用索引,而LIKE'%...%'類型搜索不能使用索引。 – 2012-01-29 02:21:42

0

如錯誤消息所示,除非在您正在比較的字段上存在索引,否則不能使用MATCH ... AGAINST

LIKE聲明應該可以工作。我認爲這個問題可能是你的模式中的雙引號,它們是多餘的,並且需要在數據庫值中引用相應的引號。請顯示您嘗試匹配的數據庫數據。

+0

這些行只是平面字符串,博客條目的標題..和$ term將會像'如何bla'或'漂亮的模板' – 2012-01-29 02:15:54

0

除了別人提到的FULLTEXT索引之外,它看起來好像沒有正確引用AGAINST子句中的文本。我覺得應該是:

AGAINST ('".$term."') 

不然,因爲你身邊已經有了您的查詢雙引號只是嵌入的變量:在$term

AGAINST ('$term')