我正在使用这个基本的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 :(得分: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 ..."