如何在 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 中搜索多个列?的主要内容,如果未能解决你的问题,请参考以下文章

如何优化具有多个结果的 MySQL/MyISAM 全文搜索

如何在 DataTables 中搜索多个列?

如何使用 Sail.js 和 MySQL 实现全文搜索?

如何在 Django 中的多个列上搜索多个关键字

如何在mysql查询中的一个变量中获取多个列

如何使用 QuerySets 和 MySql“全文搜索”在多个字段中进行 Django 搜索?