Подсчет товаров в дереве каталогов.

funkster

Новичок
Подсчет товаров в дереве каталогов.

Есть многоуровневая система каталогов с параметрами таблицы catalogs
ID name ParentID item_amount firm_amount

Таблица фирмы firms
ID name

Также есть таблица items
ID name catid firmid

Подскажите, как можно заполнить поля item_amount firm_amount в каталоге ?
Если бы количество уровней было 2 или 3 я понимаю, но неограниченное количество - не получается.
Пробовал рекурсию. Видимо как-то не так считал.
 

funkster

Новичок
нужен запрос, который во всех записях таблицы каталогов заполнит эти поля.
Там в чем беда нельзя посчитать для нижнего уровня, а потом сложением остальное сделать.
 

Marquis

Новичок
можно обойтись и без рекурсии, если вовремя добавления записи обновлять коунт соответственно +1/-1
Рекурсия может понадобится разве что только для проверки коунтов на ошибочные значения.
 

funkster

Новичок
в том то и дело, что мне надо уже на готовой базе с такой структурой сделать ...
Так бы я ввел поле левел и жил бы спокойно.
 

funkster

Новичок
Ну мне ведь получается все равно надо рекурсивно первично пройтись по всему каталогу.
Ладно, я просто думал есть алгоритмы какие без рекурсии ... буду разбираться с ней.
 

hermit_refined

Отшельник
я просто думал есть алгоритмы какие без рекурсии
Если не хотели рекурсии - надо было организовывать Nested Sets.
У вас же структура изначально рекурсивная - её лишь можно в некоторых случаях обрабатывать с помощью LEFT JOIN - но не в данном.
 

phprus

Moderator
Команда форума
hermit_refined
Может мне повезло, но я пока не встречал ни одного рекурсофила, хотя рекурсофобов мне доводилось встречать очень много.
 

funkster

Новичок
Да не, там просто свои сложности.
Посчитать items несложно.
А вот посчитать клиентов. Ведь он может поместить свои товары и в родительский каталог и в подчиненные.
Получается надо записывать все значения из дочерних каталогов в массив и потом уже обрабатывать (удалять повторы). А это уже несколько искажает рекурсию на мой взгляд. Разве что массив этот параметром передавать.

-~{}~ 12.11.06 19:51:

Народ с item_amount все получилось и работает.
Хоть убейте не могу посчитать значения firm_amount.
Если есть такая ситуация
ID PARENTID
2_____1
3_____1

В каталоги 2 и 3 часть фирм поместили товары (именно в оба).
Как учесть такую ситуацию и не посчитать их дважды ? (для каталога 1)
 
Сверху