如何在 MySQL 中搜索多个列?
Posted
技术标签:
【中文标题】如何在 MySQL 中搜索多个列?【英文标题】:How to search multiple columns in MySQL? 【发布时间】:2022-01-09 11:13:04 【问题描述】:我正在尝试创建一个搜索功能,该功能将搜索多个列以查找基于关键字的匹配。这个查询:
SELECT title FROM pages LIKE %$query%;
仅适用于搜索一列,我注意到用逗号分隔列名会导致错误。那么是否可以在mysql中搜索多个列呢?
【问题讨论】:
【参考方案1】:如果你的表是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)
,但即使没有索引也可以工作。
【讨论】:
这很好,但它只适用于完全匹配,搜索狗不会返回标题为狗的页面。 不,您可以使用通配符 'dog*' 来匹配 'dogs' 和 'dog'。虽然你不能使用 '*dog' 来获得 'adog'。仅支持前置通配符。【参考方案2】:您可以使用 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。
【讨论】:
什么是相同的参数?比如说,您正在搜索“史蒂文”是否在用户的名字或姓氏中? (假设 users 是一个表,last_name 和 first_name 是列。) @HunterStevens 在这种情况下,请参阅this other answer to this question。【参考方案3】:如果只是用于搜索,那么您可以使用 CONCATENATE_WS。 这将允许通配符搜索。 根据表的大小,可能存在性能问题。
SELECT *
FROM pages
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
【讨论】:
在 CONCAT 上加入时要小心 -percona.com/blog/2007/10/16/be-careful-when-joining-on-concat 当列中不包含“关键字”但连接的字符串包含时,这将产生错误的结果,例如对于column1 = 'key'
和column2 = 'word'
。【参考方案4】:
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');
请尝试上述查询。
【讨论】:
【参考方案5】: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'。
例如
帕特帕特尔 p 部分 帕特帕斯当我们有如下数据时,Second 很有用:'firstname-lastname'。在里面你也可以使用特殊字符。
例如
parth-patel parth_p patel#parth【讨论】:
【参考方案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."%'
使用此代码将帮助您轻松搜索多个列
【讨论】:
以上是关于如何在 MySQL 中搜索多个列?的主要内容,如果未能解决你的问题,请参考以下文章