【问题标题】:Search query does not work as expected using multiple LIKE condition使用多个 LIKE 条件时,搜索查询无法按预期工作
【发布时间】: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 既没有出现在名字列中,也没有出现在姓氏列中。

标签: php mysql ajax search


【解决方案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";
      

      【讨论】:

        猜你喜欢
        • 2015-09-05
        • 2023-04-03
        • 2019-01-28
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        相关资源
        最近更新 更多