【发布时间】:2022-01-09 11:13:04
【问题描述】:
我正在尝试创建一个搜索功能,该功能将搜索多个列以查找基于关键字的匹配。这个查询:
SELECT title FROM pages LIKE %$query%;
仅适用于搜索一列,我注意到用逗号分隔列名会导致错误。那么是否可以在mysql中搜索多个列呢?
【问题讨论】:
标签: sql mysql full-text-search
我正在尝试创建一个搜索功能,该功能将搜索多个列以查找基于关键字的匹配。这个查询:
SELECT title FROM pages LIKE %$query%;
仅适用于搜索一列,我注意到用逗号分隔列名会导致错误。那么是否可以在mysql中搜索多个列呢?
【问题讨论】:
标签: sql mysql full-text-search
如果你的表是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)
,但即使没有索引也可以工作。
【讨论】:
您可以使用 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。
【讨论】:
如果只是用于搜索,那么您可以使用 CONCATENATE_WS。 这将允许通配符搜索。 根据表的大小,可能存在性能问题。
SELECT *
FROM pages
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
【讨论】:
column1 = 'key' 和column2 = 'word'。
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');
请尝试上述查询。
【讨论】:
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 很有用:'firstname lastname'。
例如
当我们有如下数据时,Second 很有用:'firstname-lastname'。在里面你也可以使用特殊字符。
例如
【讨论】:
这是一个查询,您可以使用它从数据库中搜索任何内容作为搜索结果,
SELECT * FROM tbl_customer
WHERE CustomerName LIKE '%".$search."%'
OR Address LIKE '%".$search."%'
OR City LIKE '%".$search."%'
OR PostalCode LIKE '%".$search."%'
OR Country LIKE '%".$search."%'
使用此代码将帮助您轻松搜索多个列
【讨论】: