Подсчет всех сообщений, относящихся к категории И ее подкатегориям

StackOverflow https://stackoverflow.com/questions/1803905

Вопрос

Я был бы очень признателен за некоторую помощь в решении моей проблемы:

У меня есть 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

Рэнди

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top