Это трудно объяснить, но я сделаю все, что в моих силах.
У меня есть 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.