Получение групп из таблиц «многие-ко-многим»

Это трудно объяснить, но я сделаю все, что в моих силах.

У меня есть 2 таблицы с отношениями «многие-ко-многим»; существует таблица ссылок, определяющая взаимосвязь. Эти таблицы называются Question, QuestionTopic и Topic. Тема имеет поля TopicID и TopicName.Question имеет поля QuestionID и QuestionText.

Я хочу получить список тем и количество вопросов, относящихся к этой теме. Однако темы могут быть сгруппированы вместе, и количество вопросов, уникальных для этой комбинации, должно быть известно. В качестве примера:

Тема (ы) | подсчитывать

Тема1, Тема2 | 10

Тема1 | 3

Тема2 | 2

Из сказанного следует, что существует 3 вопроса, которые уникальны для topic1 и 10, которые имеют темы Topic1 и Topic2. Остальные 2 вопроса имеют topic2. Я использую MySQL и PHP. Благодарю.

Решение «Обмануть», используя 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 

вы пытались GROUP_CONCAT?

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

то u может группироваться по идентификатору темы.

GROUP_CONCAT, как указано выше, будет работать. Но с другой стороны, поскольку я вижу, что ваша структура базы данных не подходит для вашей задачи. Похоже, что это слишком нормализовано, и вам нужно выполнить некоторую де-нормализацию и миграцию.

Поскольку у вас есть группы тем, я предлагаю вам создать еще две таблицы: 1) ТемаГруппы: Группа | Тема – список всех уникальных комбинаций («групп») тем в вопросах. 2) GroupQuestions: Группа | Вопрос – связать вопрос с группой тем, которые он охватывает

Тогда решение для вашей задачи будет простой группой по запросу в GroupQuestions.