我正在尝试创建一个搜索功能,该功能将搜索多个列以查找基于关键字的匹配。此查询:
SELECT title FROM pages LIKE %$query%;
仅适用于搜索一列,我注意到用逗号分隔列名称会导致错误。那么mysql中是否可以搜索多列呢?
如果只是为了搜索那么你也许可以使用CONCATENATE_WS。 这将允许通配符搜索。 根据表的大小,可能会出现性能问题。
SELECT *
FROM pages
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
您可以使用 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 查询执行哪些操作的更多信息,请尝试文档。
如果您的桌子是
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)
,但即使没有索引也能工作。
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 很有用。
例如
当我们有“名字-姓氏”这样的数据时,第二个很有用。您还可以在其中使用特殊字符。
例如
这是一个查询,您可以使用它从数据库中搜索任何内容作为搜索结果,
SELECT * FROM tbl_customer
WHERE CustomerName LIKE '%".$search."%'
OR Address LIKE '%".$search."%'
OR City LIKE '%".$search."%'
OR PostalCode LIKE '%".$search."%'
OR Country LIKE '%".$search."%'
使用此代码将帮助您轻松搜索多列
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');
请尝试以上查询。
这是我在 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