2009-11-26 2 views
1

Я был бы очень признателен некоторой помощь с моей проблемой:Counting всех сообщений, относящихся к категории и ее подкатегории

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

Если категории не являются вложенными бесконечно, вы можете присоединиться к ним на один уровень за один раз. Вот пример до 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 
+0

Спасибо за быстрый ответ! Хорошее решение. Я не мог ждать и уже исправил это более громоздким способом: D, в следующий раз я буду использовать ваше решение. –

Смежные вопросы