MySQL关键字搜索查询以匹配所有关键字的项目?

时间:2012-09-28 10:44:23

标签: mysql sql search indexing keyword

我的表结构基本上是:

Items
ID: INT(10)
Title: CHAR(255)

ItemsWords
ID: INT(10)
ItemID: INT(10)
Word: CHAR(50)

对于每个“项目”记录,“ItemsWords”表中有多个记录。

我可以找到所有使用它的项目,其中包含一个单词,如下所示:

SELECT * FROM Items i, ItemsWords w WHERE w.ItemID=i.ID AND w.Word='WORD_TO_FIND'

我可以找到所有使用它的项目,其中包含以下任意一个词:

SELECT * FROM Items i, ItemsWords w 
WHERE w.ItemID=i.ID 
AND (w.Word='WORD_TO_FIND' OR w.Word='ANOTHER_WORD_TO_FIND')

但我也希望能够使用相同的表结构来仅查找包含任意数量搜索词的“项目”。

我知道我可以使用Items表格中的FullText有超过100,000条记录,而ItemWords表格的时间比这要多很多,所以设置了这种结构,使这些搜索非常快速,最小的服务器影响。上面的单词或任何单词搜索确实超级快。

谢谢!

1 个答案:

答案 0 :(得分:2)

select Items.id, Items.Title
from Items
   inner join ItemsWords   
   on Items.ID = ItemsWords.ItemID
where ItemsWords.Word in ('WORD_TO_FIND','ANOTHER_WORD_TO_FIND') 
group by Items.id, Items.Title
having count(distinct ItemsWords.id) =2

最后一行中的数字是您要搜索的单词列表中的单词数(例如:在这种情况下为2。

注意如何使用inner join语法连接表,而不是where子句