如何在MySQL中搜索多个列?

23 浏览
0 Comments

如何在MySQL中搜索多个列?

我正在尝试创建一个搜索功能,可以搜索多个列以找到基于关键词的匹配项。这个查询语句:

SELECT title FROM pages LIKE %$query%;

只适用于搜索一个列,我注意到用逗号分隔列名会导致错误。所以在MySQL中是否可以搜索多个列?

0
0 Comments

问题的原因:

用户想要在MySQL中搜索多个列,但目前使用的方法只能进行精确匹配,无法进行模糊匹配。

解决方法:

如果表是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',只能在开头添加通配符。

0
0 Comments

问题的出现原因是想要在MySQL中搜索多个列。解决方法是使用AND或OR运算符,并根据搜索的要求选择相应的运算符。如果需要两个条件都满足才返回记录,则使用AND运算符。如果只需要其中一个条件满足就返回记录,则使用OR运算符。以下是解决方法的示例代码:

使用AND运算符:

SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%;

使用OR运算符:

SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%;

如果参数的值相同,例如想要搜索用户的姓氏或名字中是否包含'Steven',则可以参考这个问题的其他答案

0
0 Comments

问题的原因:用户想要在MySQL中搜索多个列。

解决方法:

可以使用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'` 的情况。

0