【问题标题】:How to group search results with multiple keywords in MySQL如何在 MySQL 中使用多个关键字对搜索结果进行分组
【发布时间】:2017-04-23 13:04:40
【问题描述】:

我有一个包含链接到某个帖子的关键字的数据库::

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

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

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

【问题讨论】:

    标签: php mysql group-by inner-join


    【解决方案1】:

    您可以使用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 中分配比较值。

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

    【讨论】:

    • 完美运行!谢谢
    猜你喜欢
    • 2015-06-10
    • 2012-08-19
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多