小编典典

从多对多表中检索分组

sql

这很难解释,但我会尽力而为。

我有2个具有多对多关系的桌子;有一个定义关系的链接表。这些表分别命名为Question,QuestionTopic和Topic。主题具有字段TopicID和TopicName.Question具有字段QuestionID和QuestionText。

我想检索主题列表以及属于该主题的问题数量。但是,可以将主题归为一组,并且应该知道该组合所独有的问题数。举个例子:

主题| 数数

主题1,主题2 | 10

主题1 | 3

主题2 | 2个

上面的内容暗示主题1和主题10有3个独特的问题,主题分别为主题1和主题2。剩下的2个问题都有topic2。我正在使用MySQL和PHP。谢谢。


阅读 173

收藏
2021-04-28

共1个答案

小编典典

使用的“作弊”解决方案GROUP_CONCAT()。这不会显示与任何主题均不相关的问题的数量:

SELECT
      TopicIds
    , COUNT(*) AS QuestionCount
FROM
      ( SELECT
              QuestionId
            , GROUP_CONCAT(TopicId ORDER BY TopicId) AS Topics
        FROM 
              QuestionTopic
        GROUP BY 
              QuestionId
      ) AS grp
GROUP BY
      Topics
2021-04-28