这很难解释,但我会尽我所能。
我有2张表与多对多的关系;有一个定义关系的链接表。这些表名为Question,QuestionTopic和Topic。主题包含TopicID和TopicName.Question字段,其字段为QuestionID和QuestionText。
我想检索主题列表和属于该主题的问题数量。但是,主题可以组合在一起,并且应该知道该组合特有的问题计数。举个例子:
主题|计数
主题1,主题2 | 10
主题1 | 3
主题2 | 2
以上暗示了topic1和10有3个独特的问题,其主题是Topic1和Topic2。剩下的两个问题有topic2。 我正在使用MySQL和PHP。感谢。
答案 0 :(得分:3)
“作弊”解决方案,使用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
答案 1 :(得分:1)
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
然后,您可以按主题ID分组。
答案 2 :(得分:1)
如上所述的GROUP_CONCAT将起作用。但另一方面,因为我发现你的数据库结构并不适合你的任务。看起来它太规范了,你需要做一些去规范化和迁移。
由于您有一组主题,我建议您再创建两个表: 1)主题组:组|主题 - 列出问题中主题的所有唯一组合(“组”)。 2)GroupQuestions:Group |问题 - 将问题与其涵盖的主题组相关联
然后,您的任务的解决方案将在GroupQuestions上逐个查询。