如何在MySQL中搜索多列?

问题描述 投票:0回答:7

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

SELECT title FROM pages LIKE %$query%;

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

sql mysql full-text-search
7个回答
63
投票

如果只是为了搜索那么你也许可以使用CONCATENATE_WS。 这将允许通配符搜索。 根据表的大小,可能会出现性能问题。

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

58
投票

您可以使用 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 查询执行哪些操作的更多信息,请尝试文档


20
投票

如果您的桌子是

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)

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


7
投票

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 很有用。

例如

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

当我们有“名字-姓氏”这样的数据时,第二个很有用。您还可以在其中使用特殊字符。

例如

  • 帕特帕特尔
  • 帕斯_p
  • 帕特尔#帕斯

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."%'

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


0
投票
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');

请尝试以上查询。


0
投票

这是我在 dev.to/massivebrains 找到的替代方案。它使用 LOCATE 并提供快速结果。 LOCATE用于查找字符串的位置,concate_ws使用第一个字符串作为分隔符。因此,请选择一个不会出现在搜索字符串中的分隔符(否则可能会由于列桥接而出现错误匹配)。

SELECT
    *
FROM `addresses`
WHERE LOCATE('NY', CONCAT_WS('|', `address_line_1`, `address_line_2`, `city`, `street_name`, `street_name`)) > 0
© www.soinside.com 2019 - 2024. All rights reserved.