Всем привет. Имеется массив - стандартное дерево категорий с неограниченной вложенностью. В каждой категории имеется поле ID, parent и count_products. Поле count_products содержит количество товаров в категории. Массив получен запросом из Mysql и обработан функцией построения дерева категорий. Товары распределены по конечным категориям. Соответственно у любой родительской категории поле count_products будет равно 0. Нужна функция для подсчета товаров для родительских категорий. Прошу помочь с этим вопросом.
Тут цикл нужен. И отдельная таблица. Которую этот цикл будет обновлять, в случае изменения count_products
Понятно что цикл нужен. Я даже склоняюсь к тому что рекурсивная функция нужна. Чтобы высчитывание количества начиналось с самых нижних категорий. Вот только как это реализовать.
1. получить все категории с их принадлежностью, хватит id и category_id 2. рекурсивной функцией пройтись по корневому каталогу - с заходом до упора - получить в итоге для заданной категории дерево - забарть все id категорий дерева 3. SELECT COUNT(id) FROM products WHERE category_id IN (тут список id из 2 шага) получим кол-во товаров в данной категории с вложенными всеми
Так и делается. Извлекаются все записи у которых есть родитель и есть товары. Считаем по кучкам. В другую таблицу заносим ID родителя и количество в кучке в новую колонку. Следующая итерация. Объединяем таблицы, извлекаем только то, что есть в новой таблице, и имеет "кучки", и при этом имеет родителя. Суммируем извлеченное по родителям, заносим в ту же таблицу. И тд, пока родители не кончатся. Кстати, цикл как-то ограничить надо, если что-то с ID родителя напутано, то цикл будет бесконечным.