我正在尝试制作搜索功能,搜索多个列以查找基于关键字的匹配项。这个查询:
SELECT title FROM pages LIKE %$query%;
仅用于搜索一列,我注意到用逗号分隔列名会导致错误。那么可以在mysql中搜索多个列吗?
答案 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'。
例如
当我们有以下数据时,第二个是有用的:'firstname-lastname'。在其中,您还可以使用特殊字符。
例如
答案 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."%'
使用此代码将帮助您轻松地搜索多列