【问题标题】:Like statement across multiple columns in SQL在 SQL 中跨多个列的 Like 语句
【发布时间】:2017-07-26 14:54:26
【问题描述】:

我正在尝试跨多个列查询 like 语句。我有以下搜索词: '狗' '猫' '兔子' '沙鼠' '豚鼠' '仓鼠'

我需要在“动物”表中搜索这些术语或类似这些术语,该表有大约 40 个不同的列。我知道我可以通过

来做类似的声明
 Select * from animals where [animalscolumn] like ('%dog%') or like ('%cat%') or like ('%gerbil%') or like ('%hamster%') or like ('%guinea pig%')

但是,“animalcolumn”并不是我需要在其中运行“LIKE”语句的唯一列。我必须在大约 40 列中搜索这些术语。有人会碰巧知道怎么做吗?谢谢!

【问题讨论】:

  • 您使用的是什么 DBMS?
  • 你可以使用这样的临时表:stackoverflow.com/a/1387797/7667467
  • 这是一次性任务还是功能的一部分?对于一次性任务,我会在我的文本编辑器中使用复制粘贴/上下文替换来编写包含 240 个子句的查询,并在一次性任务完成后将其丢弃。对于一项功能,我会研究您的数据库的全文搜索功能,或者可能会在您的应用程序中加入类似 ElasticSearch 的功能。

标签: sql search sql-like


【解决方案1】:

多个like 语句不能直接与or 一起使用。对于每个 like 语句,您必须使用 column name

如下所述使用多个。

Select * 
from animals 
where 
(
[animalscolumn] like ('%dog%') or 
[animalscolumn] like ('%cat%') or 
[animalscolumn] like ('%gerbil%') or 
[animalscolumn] like ('%hamster%') or 
[animalscolumn] like ('%guinea pig%')
)

【讨论】:

  • 我认为OP想要在多列中搜索字符串;您的示例仅搜索一列。
  • 不。他想在一列中搜索字符串。检查他的问题。只有一列提到了多个 or 条件。
【解决方案2】:

如果你想找到一组数字,你可以使用 IN

SELECT * 
FROM tableName
WHERE columnId IN (154,156,133,157,119)

【讨论】:

    【解决方案3】:

    $sql = "SELECT * from like1 WHERE tutorial_author LIKE '$apply' 要么 tutorial_title LIKE '$apply'";

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案4】:

    if($mode == 'search_contact'){ // $prefix='%';

    $apply=$dataObj['search'];
      $data = array();
      // $sql = "SELECT * from add_contact WHERE tutorial_author OR tutorial_title  LIKE '$apply'";
        $sql = "SELECT * from add_contact WHERE
        first_name LIKE '%$apply%'
                 OR
        last_name LIKE '%$apply%'
               OR
        title LIKE '%$apply%'
             OR
        company LIKE '%$apply%'
                 OR
        address LIKE '%$apply%'";
    
    
        $result = $myConnection->query($sql);
    
      if ($result->num_rows > 0) {
    
        // print_r($result->fetch_assoc());
        while($row = $result->fetch_assoc()) {
                $row['user_image'] = site_url.upload_dir.$row['image'];
          // print_r($row);
          $data[]=$row;
    
    
        }
        $array = array('status'=>true, 'message'=> 'contacts fetched successfully', 'data'=> $data);
              echo json_encode($array);
              exit;
      } else {
        $array = array('status'=>false, 'message'=> "No contacts available" );
              echo json_encode($array);
              exit;
      }
    

    }

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多