如何在MySQL中搜索多个列?

时间:2010-03-25 10:08:15

标签: sql mysql full-text-search

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

SELECT title FROM pages LIKE %$query%;

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

6 个答案:

答案 0 :(得分:41)

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

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

答案 1 :(得分:35)

您可以使用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

答案 2 :(得分:15)

如果您的表格为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)

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

答案 3 :(得分:3)

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%';

当我们有以下数据时,首先是有用的:'firstname lastname'。

例如

  • parth patel
  • parth p
  • patel parth

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

例如

  • PARTH-帕特尔
  • parth_p
  • 巴特尔#PARTH

答案 4 :(得分:0)

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

请尝试使用以上查询。

答案 5 :(得分:0)

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

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

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