За последние 24 часа нас посетили 22715 программистов и 1211 роботов. Сейчас ищут 794 программиста ...

Подсчет количества товаров в родительских и дочерних категорий

Тема в разделе "Решения, алгоритмы", создана пользователем anipriev, 19 окт 2022.

  1. anipriev

    anipriev Активный пользователь

    С нами с:
    9 окт 2014
    Сообщения:
    8
    Симпатии:
    0
    Всем привет.

    Имеется массив - стандартное дерево категорий с неограниченной вложенностью. В каждой категории имеется поле ID, parent и count_products. Поле count_products содержит количество товаров в категории.
    Массив получен запросом из Mysql и обработан функцией построения дерева категорий.

    Товары распределены по конечным категориям. Соответственно у любой родительской категории поле count_products будет равно 0.

    Нужна функция для подсчета товаров для родительских категорий.

    Прошу помочь с этим вопросом.
     
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Тут цикл нужен. И отдельная таблица. Которую этот цикл будет обновлять, в случае изменения count_products
     
  3. anipriev

    anipriev Активный пользователь

    С нами с:
    9 окт 2014
    Сообщения:
    8
    Симпатии:
    0
    Понятно что цикл нужен. Я даже склоняюсь к тому что рекурсивная функция нужна. Чтобы высчитывание количества начиналось с самых нижних категорий. Вот только как это реализовать.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    1. получить все категории с их принадлежностью, хватит id и category_id
    2. рекурсивной функцией пройтись по корневому каталогу - с заходом до упора - получить в итоге для заданной категории дерево - забарть все id категорий дерева
    3. SELECT COUNT(id) FROM products WHERE category_id IN (тут список id из 2 шага) получим кол-во товаров в данной категории с вложенными всеми
     
  5. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Так и делается.
    Извлекаются все записи у которых есть родитель и есть товары.
    Считаем по кучкам. В другую таблицу заносим ID родителя и количество в кучке в новую колонку.
    Следующая итерация.
    Объединяем таблицы, извлекаем только то, что есть в новой таблице, и имеет "кучки", и при этом имеет родителя. Суммируем извлеченное по родителям, заносим в ту же таблицу.
    И тд, пока родители не кончатся.
    Кстати, цикл как-то ограничить надо, если что-то с ID родителя напутано, то цикл будет бесконечным.