我有一个数据库,其关键字链接到某个帖子::
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
部分执行此操作,还是必须更改所有内容?
答案 0 :(得分:0)
您可以使用GROUP BY
和HAVING
:
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
中分配比较值。
注意:您可能需要进行一些预处理,以确保不会输入两次关键字。