2012-03-07 64 views
0

多個單詞我使用這個基本的MySQL查詢偉大的工程:搜索用mysql對陣

$sql = "SELECT * FROM `clients` WHERE 
     MATCH(`LNAME`) AGAINST('$c') OR 
     MATCH(`FNAME`) AGAINST('$c') OR 
     MATCH(`MAIL`) AGAINST('$c') OR 
     MATCH(`TEL`) AGAINST('$c') " 

其中$ c是搜索查詢。現在,這適用於所有單個單詞/數字,但每當添加2個單詞時都不會返回結果。例如,如果我的數據庫在LNAME中有aaaa bbbb,並且我搜索「aaaa bbbb」,那麼我不會收到任何迴應,但是當我搜索「aaaa」或「bbbb」時,它確實有效。我嘗試添加IN BOOLEAN MODE,但它沒有什麼區別。

難道有人會向我解釋這是如何工作的? $ c由字母,數字和/或@

非常感謝。

+0

你設置這些領域的全文索引? – 2012-03-07 11:52:26

+0

@Ofir Baruch是的我做過 – cmplieger 2012-03-07 12:13:16

+0

@Ofir Baruch http://tinypic.com/r/30cov9s/5 – cmplieger 2012-03-07 12:18:42

回答

2

首先,你應該使用對陣這樣的:

$sql = "SELECT * FROM `clients` WHERE MATCH(`LNAME`,`FNAME`,`MAIL`,`TEL`) AGAINST('$c')" 

請注意:

短詞被忽略,默認最小長度爲4個字符。 可以用變量改變的最小和最大字長 的ft_min_word_len和ft_max_word_len

和:

如果一個字存在於行的50%以上它將具有一個 重量爲零。這在大數據集上具有優勢,但是可以使小測試難以進行 。

您可以使用LIKE,它可能會有更好的結果。用法 例子:

$sql = "SELECT * FROM `clients` WHERE `LNAME` LIKE '%$c%' OR `FNAME` LIKE '%$c%' OR ..."