如何在MySQL中搜索多个列?

Geo*_*rge 31 mysql sql full-text-search

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

SELECT title FROM pages LIKE %$query%;
Run Code Online (Sandbox Code Playgroud)

仅用于搜索一列,我注意到用逗号分隔列名会导致错误.那么有可能在mysql中搜索多个列吗?

小智 46

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

SELECT * 
FROM pages 
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
Run Code Online (Sandbox Code Playgroud)

  • 加入CONCAT时要小心-https://www.percona.com/blog/2007/10/16/be-careful-when-joining-on-concat/ (2认同)
  • 当列中不包含“关键字”但连接的字符串包含“关键字”时,这将产生错误的结果,例如“column1 = 'key'”和“column2 = 'word'”。 (2认同)

aka*_*ike 39

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

SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%;
Run Code Online (Sandbox Code Playgroud)

两个条款必须匹配要返回的记录.或者:

SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%;
Run Code Online (Sandbox Code Playgroud)

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

有关使用MySQL SELECT查询可以执行的操作的更多信息,请尝试使用文档.


Qua*_*noi 17

如果你的表是MyISAM:

SELECT  *
FROM    pages
WHERE   MATCH(title, content) AGAINST ('keyword' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

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

CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content)
Run Code Online (Sandbox Code Playgroud)

,但即使没有索引也能工作.

  • 这很好,但它只适用于完全匹配,搜索狗不会返回标题为狗的页面. (2认同)
  • 不,您可以使用通配符“dog*”来匹配“dogs”和“dog”。虽然你不能使用 '*dog' 来获取 'adog'。仅支持前置通配符。 (2认同)

Par*_*tel 6

1)

select *
from employee em
where CONCAT(em.firstname, ' ', em.lastname) like '%parth pa%';
Run Code Online (Sandbox Code Playgroud)

2)

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

当我们有这样的数据时,第一个很有用:'firstname lastname'。

例如

  • 帕特尔
  • 部分
  • 帕特尔帕特

当我们有像这样的数据时,第二个很有用:'firstname-lastname'。您还可以在其中使用特殊字符。

例如

  • 帕特尔
  • 部分_p
  • 帕特尔#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."%'
Run Code Online (Sandbox Code Playgroud)

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