Mysql使用IN搜索包含每个IN子句单词的条目

Posted

技术标签:

【中文标题】Mysql使用IN搜索包含每个IN子句单词的条目【英文标题】:Mysql using IN to search for entry which contains every IN clausle word 【发布时间】:2016-04-26 18:30:42 【问题描述】:

我有这个 mysql 查询:

SELECT page_id FROM page
WHERE page_title IN ('paul', 'mccartney')

我的目标是获取包含这两个词的文章(在这个例子中可能有更多的词)。我有一篇文章,其中page_title 包含'paul mccartney'。他只搜索包含一个单词的行的问题,它返回给我的条目只有'paul' 作为page_title。我希望服务器返回 page_title 包含我在 in clausle 中的每个单词的行。

【问题讨论】:

“我有一篇文章 page_title 包含 'paul mccartney'” 而你使用的是IN()?这没有任何意义,你的问题也不清楚。您需要向我们展示您的数据库架构是什么样的。 看起来像这样prntscr.com/9smpoe IN() 是一个列的数组搜索。你想要WHERE page_title = "paul mccartney" 是的,这毫无意义,我不知道如何快速解决问题,因为我知道我可以对每个单词使用 LIKE 参数,但如果超过 3 个单词,它会非常慢. 怎么会慢?如果您的数据库没有被索引,那么这会减慢它的速度。 MySQL 应该能够毫无问题地处理数千条记录。您的查询失败,因为它们包含下划线。另一个问题 【参考方案1】:

你总是可以使用union

SELECT page_id FROM page
WHERE page_title Like '%paul%'
UNION 
SELECT page_id FROM page
WHERE page_title Like '%mccartney%'

【讨论】:

以上是关于Mysql使用IN搜索包含每个IN子句单词的条目的主要内容,如果未能解决你的问题,请参考以下文章

带有 union 和 in 子句的 Mysql 错误

Mysql容易忽视的基础杂记

将数组转换为 WHERE IN mysql 子句的格式

IN子句中的MySQL多列

MySQL UNION SELECT 和 IN 子句

MySQL:开始日期和结束日期之间的日期的 IN 子句?