Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mysql匹配搜索多个单词_Php_Mysql - Fatal编程技术网

Php 使用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是搜索查询。现在,这适用于所有单个单词/数字,但每当

我使用的基本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是搜索查询。现在,这适用于所有单个单词/数字,但每当我添加两个单词时,都不会返回结果

例如,如果我的数据库在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.发布一个答案,我会给你一个积分:)