【问题标题】:How to search multiple columns in MySQL?如何在 MySQL 中搜索多个列?
【发布时间】:2022-01-09 11:13:04
【问题描述】:

我正在尝试创建一个搜索功能,该功能将搜索多个列以查找基于关键字的匹配。这个查询:

SELECT title FROM pages LIKE %$query%;

仅适用于搜索一列,我注意到用逗号分隔列名会导致错误。那么是否可以在mysql中搜索多个列呢?

【问题讨论】:

    标签: sql mysql full-text-search


    【解决方案1】:

    如果你的表是MyISAM:

    SELECT  *
    FROM    pages
    WHERE   MATCH(title, content) AGAINST ('keyword' IN BOOLEAN MODE)
    

    如果您在列上创建FULLTEXT 索引,这会快得多:

    CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content)
    

    ,但即使没有索引也可以工作。

    【讨论】:

    • 这很好,但它只适用于完全匹配,搜索狗不会返回标题为狗的页面。
    • 不,您可以使用通配符 'dog*' 来匹配 'dogs' 和 'dog'。虽然你不能使用 '*dog' 来获得 'adog'。仅支持前置通配符。
    【解决方案2】:

    您可以使用 AND 或 OR 运算符,具体取决于您希望搜索返回的内容。

    SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%;
    

    两个子句必须匹配才能返回记录。或者:

    SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%;
    

    如果任一子句匹配,则将返回记录。

    有关 MySQL SELECT 查询的更多信息,请尝试documentation

    【讨论】:

    • 什么是相同的参数?比如说,您正在搜索“史蒂文”是否在用户的名字或姓氏中? (假设 users 是一个表,last_name 和 first_name 是列。)
    • @HunterStevens 在这种情况下,请参阅this other answer to this question
    【解决方案3】:

    如果只是用于搜索,那么您可以使用 CONCATENATE_WS。 这将允许通配符搜索。 根据表的大小,可能存在性能问题。

    SELECT * 
    FROM pages 
    WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
    

    【讨论】:

    【解决方案4】:
    SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');
    

    请尝试上述查询。

    【讨论】:

      【解决方案5】:

      1)

      select *
      from employee em
      where CONCAT(em.firstname, ' ', em.lastname) like '%parth pa%';
      

      2)

      select *
      from employee em
      where CONCAT_ws('-', em.firstname, em.lastname) like '%parth-pa%';
      

      当我们有像这样的数据时,First 很有用:'firstname lastname'。

      例如

      • 帕特帕特尔
      • p 部分
      • 帕特帕斯

      当我们有如下数据时,Second 很有用:'firstname-lastname'。在里面你也可以使用特殊字符。

      例如

      • parth-patel
      • parth_p
      • patel#parth

      【讨论】:

        【解决方案6】:

        这是一个查询,您可以使用它从数据库中搜索任何内容作为搜索结果,

        SELECT * FROM tbl_customer 
            WHERE CustomerName LIKE '%".$search."%'
            OR Address LIKE '%".$search."%' 
            OR City LIKE '%".$search."%' 
            OR PostalCode LIKE '%".$search."%' 
            OR Country LIKE '%".$search."%'
        

        使用此代码将帮助您轻松搜索多个列

        【讨论】:

          猜你喜欢
          • 2017-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-24
          • 2020-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多