使用多个 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 条件时,搜索查询无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
Ansible playbook 上的“何时”条件无法使用运算符按预期工作
在 C++ 中对整数数组进行线性搜索时,SSE 比较无法按预期工作