如何在MySQL中使用多个关键字对搜索结果进行分组

时间:2017-04-23 13:04:41

标签: php mysql group-by inner-join

我有一个数据库,其关键字链接到某个帖子::

Table word_index: word_id - keyword
Table word_rel: word_id - postId - unique_id


Example word_index:
1 - keyword1
2 - keyword2
3 - keyword3 
...

Example word_rel:
1 - 1 - 1
2 - 1 - 2
3 - 2 - 3
...

现在,用户可以搜索一个或多个关键字(就像Google一样)。

我使用SQL查询,这很好用。但是,当他们使用多个关键字时,我希望结果更严格,只显示两个关键字匹配的结果。现在,查询将返回所有其中一个关键字匹配的帖子。

SELECT g.postName
FROM
(SELECT gr.postId FROM word_index wi INNER JOIN word_rel gr ON wi.word_id = 
gr.word_id (keyword1,keyword2) ) prr
INNER JOIN posts g ON g.postId = prr.postId
GROUP BY g.postId DESC

因此Select部分中的FROM (SELECT ...)会选择所有匹配的项目。之后,它应该只显示两个关键字的所有匹配,而不是两个中的一个。

我可以在最后GROUP BY部分执行此操作,还是必须更改所有内容?

1 个答案:

答案 0 :(得分:0)

您可以使用GROUP BYHAVING

执行此操作
SELECT gr.postId
FROM word_index wi INNER JOIN
     word_rel gr
     ON wi.word_id = gr.word_id
WHERE wi.keyword IN (keyword1, keyword2)
GROUP BY gr.postId
HAVING COUNT(*) = 2;

您需要从提供的搜索字符串构造IN列表。然后,您需要根据要匹配的关键字数量在HAVING中分配比较值。

注意:您可能需要进行一些预处理,以确保不会输入两次关键字。