使用mysql MATCH AGAINST搜索多个单词

时间:2012-03-07 11:35:04

标签: php 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由字母,数字和/或@

组成

非常感谢。

1 个答案:

答案 0 :(得分:2)

首先,您应该像这样使用MATCH AGAINST:

$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 ..."