使用多个 LIKE 条件时,搜索查询无法按预期工作

Posted

技术标签:

【中文标题】使用多个 LIKE 条件时,搜索查询无法按预期工作【英文标题】:Search query does not work as expected using multiple LIKE condition 【发布时间】:2017-01-06 13:24:58 【问题描述】:

如果使用单词之间的间隙,搜索查询显示零结果。例如:

数据库:

TABLE NAME - peoples
-----------------------------------
ID   -   forename   -   surname
-----------------------------------
1        Johny          Depp
2        Kobe           Bryant
3        Random         Name
4        Mark           Zuckerberg

etc

查询:

$sqlnames="SELECT id, forename, surname FROM peoples WHERE forename LIKE '%$search_keyword%' OR surname LIKE '%$search_keyword%' LIMIT 20";

例如,如果在输入中我输入:Johny,它会按预期显示:John Depp,或者如果我输入姓氏:Depp em>,它也按预期显示,但如果我输入全名:Johny Depp,它给出的结果为零。我该如何解决?

抱歉英语不好,感谢您的任何回答!

【问题讨论】:

也许可以使用AND OR 我在 WHERE 中使用 OR。这很糟糕吗? 用括号试试,比如SELECT id, forename, surname FROM peoples WHERE (forename LIKE '%$search_keyword%' OR surname LIKE '%$search_keyword%') LIMIT 20 @devpro 同无括号 您需要将搜索字符串拆分为单独的单词,并为每个单词/列组合的查询添加OR。现在您得到 0 个结果,因为文本 Johny Depp 既没有出现在名字列中,也没有出现在姓氏列中。 【参考方案1】:

这是您的查询。

$sqlnames="SELECT id, forename, surname FROM peoples WHERE forename LIKE '%$search_keyword%' OR surname LIKE '%$search_keyword%' OR 
CONCAT(forename, ' ', surname ) LIKE '%$search_keyword%'
 LIMIT 20";

【讨论】:

【参考方案2】:

尝试以下方法:

$sqlnames="SELECT id, forename, surname,concat(forename,' ',surname) as fullname FROM peoples WHERE fullname LIKE '%$search_keyword%' OR forename LIKE '%$search_keyword%' OR surname LIKE '%$search_keyword%' LIMIT 20";

【讨论】:

@Tauras 好的。。:-) @Tauras 没问题 :-)【参考方案3】:

当您搜索全名时,您是在名字中搜索“全名”或在姓氏中搜索“全名”。这就是为什么你没有得到结果。

尝试添加另一个条件OR CONCAT(forename, ' ', surname) LIKE '%$search_keyword%'

【讨论】:

【参考方案4】:

需要分词再搜索:

$word_array = explode(" ",$search_keyword);
$sqlnames="SELECT id, forename, surname FROM peoples WHERE";
$count = 0;
foreach($word_array as $value)
    if($count == 0)
        $sqlnames .= " forname LIKE '" . $value ."'";
    
    else
        $sqlnames .= " OR forname LIKE '" . $value ."'";
    
    $count = 1;
    $sqlnames .= " OR surname LIKE '" . $value ."'";    

$sqlnames .="LIMIT 20";

【讨论】:

以上是关于使用多个 LIKE 条件时,搜索查询无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch嵌套查询无法按预期工作

SQL 查询使用多个条件和 LIKE 通配符

Ansible playbook 上的“何时”条件无法使用运算符按预期工作

在 C++ 中对整数数组进行线性搜索时,SSE 比较无法按预期工作

Primefaces Accordion + Datatable过滤器/多项选择无法按预期工作

查询中有多个 LIKE 语句