подсчёт элементов в категориях nested sets

landpro

Guest
подсчёт элементов в категориях nested sets

Имеется таблица с деревом nested sets,
имеется вторая, где содержаться сами сущности (элементы).

Вопрос.
Как посчитать кол-во элементов для каждой категории?
И как это сделать с наименьшим кол-вом запросов?

Допустим таблица категорий - sd_cat,
таблица элементов - sd_element.
Кол-во элементов нужно писать в sd_cat.count_element(INT)...


У меня есть алгоритм php+sql, который всё считает. Но для базы 2000 категорий и 300 000 элементов - он делает миллионы sql запросов.
 

Groove

Новичок
select sd_cat.*, count(element_id.sd_element) from sd_cat
left join sd_element on sd_element.cid=sd_cat.cid
group by sd_cat.cid

плюс при вставке/удалении нового элемента пересчитывать сумму для всех веток-родителей включая ее саму
 

landpro

Guest
получилось вот что:

SELECT sdlogo_category . * , count( sdlogo_logo.id )
FROM sdlogo_category
LEFT JOIN sdlogo_logo ON sdlogo_logo.category_id = sdlogo_category.id
GROUP BY sdlogo_category.id LIMIT 0 , 30

работает, считает, но...
такой вариант не учитывает подкатегорий...
Допустим в категории Автомобили пишет 0, а
у категории BMW - 500 - правильно.
Мне нужно, чтобы число элементов категории Автомобили расчитывалось исходя из количества элементов всех подкатегорий.
 

Groove

Новичок
landpro
перечитай еще раз мой пост, вернее его окончание...

хинт: когда добавляешь в категорию БМВ машину, обновляй кэш в таблице категории для всех родителей БМВ
Товары -> Автомобили -> БМВ

update sd_cat set count_element=count_element+1 where ...

-~{}~ 16.10.05 00:45:

+ еще нужно иметь механизм для принудительного подсчета элементов...

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

landpro

Guest
дык вот я и пытаюсь написать принудительный пересчёт кол-ва элементов..
то, что нужно пересчитывать по ходу добавления/удаления это правильно, но это не мой вопрос.

подскажи, пожалуйста, как написать пересчёт?
возможно ли это сделать одним update?
или всё равно понадобится mix - php&sql
 
Сверху