这是我在表CompaniescName中的数据

CK'Wang Pte Ltd
Chong Wang Pte Ltd
CK'Studio Pte Ltd


这是我的查询

$query = mysql_query("SELECT cName FROM Companies WHERE MATCH cName AGAINST ('+CK\'Wang Pte Ltd' IN BOOLEAN MODE)");
$result = mysql_num_rows($query);


$ result显示2。如何仅匹配1(CK'Wang Pte Ltd)而不是2

最佳答案

如果要使所有术语在布尔模式下都匹配,则需要在每个术语前面添加一个+。查询的解释方式,CK是强制性的,所有其他术语都是可选的,并且大多数情况下会影响结果的排名。

如果您需要根据用户请求构建查询并匹配所有条件,则需要先进行转换。

function fulltext_match_all($query)
{
    $final = array();
    foreach (array_filter(preg_split('/[\s\'-]+/', $query)) as $word) {
            $final[] = "+$word";
    }
    $query = implode(' ', $final);
}


您的最终查询如下所示:

SELECT cName FROM Companies WHERE MATCH cName AGAINST ('+CK +Wang +Pte +Ltd' IN BOOLEAN MODE)

关于php - PHP从MySQL数据库搜索FULLTEXT转义字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8778245/

10-13 08:47