Подсчет всех сообщений, относящихся к категории И ее подкатегориям
-
05-07-2019 - |
Вопрос
Я был бы очень признателен за некоторую помощь в решении моей проблемы:
У меня есть 2 таблицы MySQL, категории и сообщения, оформленные (упрощенные) следующим образом:
Категории:
CATID - имя - parent_id
Публикации:
PID - имя - категория
Что я хотел бы сделать, так это получить общее количество сообщений для каждой категории, включая любые сообщения в подкатегориях.
Прямо сейчас я получаю общее количество сообщений в каждой категории (верхнего уровня) (но не подкатегорий), выполнив:
"SELECT c.*, COUNT(p.PID) as postCount
FROM categories AS c LEFT JOIN posts AS p
ON (c.CATID = p.category)
WHERE c.parent='0' GROUP BY c.CATID ORDER BY c.name ASC";
Вопрос еще раз в том, как я могу получить итоговые данные по каждой категории, включая итоговые данные по каждой связанной подкатегории?
Реструктуризация базы данных в формат вложенного набора невозможна, так как я поддерживаю существующую систему.
Спасибо за вашу помощь!
Решение
Если категории не являются вложенными бесконечно, вы можете присоединиться к ним по одному уровню за раз. Вот пример для 3 уровней вложенности:
SELECT c.name, COUNT(DISTINCT p.PID) as postCount
FROM categories AS c
LEFT JOIN categories AS c2
ON c2.parent = c.catid
LEFT JOIN categories AS c3
ON c3.parent = c2.catid
LEFT JOIN posts AS p
ON c.CATID = p.category
OR c2.CATID = p.category
OR c3.CATID = p.category
WHERE c.parent = '0'
GROUP BY c.CATID, c.name
ORDER BY c.name ASC
Другие советы
Я думаю, вы хотите взглянуть на оператор свертки.Я верю, что это даст вам то, чего вы хотите.
http://msdn.microsoft.com/en-us/library/ms189305 (SQL.90).aspx
Рэнди