Php 使用mysql匹配搜索多个单词
我使用的基本mySQL查询非常有效:Php 使用mysql匹配搜索多个单词,php,mysql,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是搜索查询。现在,这适用于所有单个单词/数字,但每当
$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是搜索查询。现在,这适用于所有单个单词/数字,但每当我添加两个单词时,都不会返回结果
例如,如果我的数据库在LNAME中有aaaa bbbb
,并且我搜索“aaaa bbbb”,我什么也没有得到,但是当我搜索“aaaa”或“bbbb”时,它确实起作用。我尝试在布尔模式下添加,但没有任何区别
有人能告诉我这是怎么回事吗$c由字母、数字和/或a组成@
非常感谢。首先,您应该像这样使用MATCH-Ant:
$sql = "SELECT * FROM `clients` WHERE MATCH(`LNAME`,`FNAME`,`MAIL`,`TEL`) AGAINST('$c')"
请注意:
忽略短单词,默认最小长度为4个字符。
您可以使用变量更改最小和最大字长
ft_min_word_len和ft_max_word_len
以及:
如果一个单词出现在超过50%的行中,它将有一个
零的重量。这在大型数据集上有优势,但可以
在小型设备上进行测试很困难
您可以像一样使用,这样可能会有更好的效果。
用法示例:
$sql = "SELECT * FROM `clients` WHERE `LNAME` LIKE '%$c%' OR `FNAME` LIKE '%$c%' OR ..."
您是否将这些字段设置为全文索引?@Ofir Baruch等一下,如果您要在“短”字段中搜索,为什么要使用全文索引?全文用于在文本、BLOB字段中搜索。尝试使用类似的-这会给您带来更好的结果。@Ofir Baruch我使用了$sql=“SELECT*,来自客户机,其中concatws(“”,LNAME,FNAME,TEL,MAIL)类似“%”$c.“%”;它是有效的:D.发布一个答案,我会给你一个积分:)