Подсчет количества подгатегорий

Afr0

Новичок
Условие:
Есть категории, в категориях есть товар
PHP:
Категория 1
        Подкатегория 1.1
                Товар 1
                Товар 2
        Подкатегория 1.2
                Подкатегория 1.2.1
                            Товар 1
                            Товар 2
        Подкатегория 1.3
Категория 2
        Подкатегория 2.1
                Подкатегория 2.1.1
                            Товар 1
                            Товар 2
                            Товар 3
                            Товар 4
        Подкатегория 2.2

        Подкатегория 2.3
Категория 3
и т.д.
Категории создаются и удаляются, как и товар в них.

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

Т.е. в
PHP:
Категории 1 -            4 шт.
Подкатегория 1.1 -    2шт.
Подкатегория 1.2 -    2шт.
Категория 2 -            4шт.
Как должна выглядить структура базы данных и как написать цикл php для подсчета количества?

Сейчас структура БД выглядить так

PHP:
     id     parentfolder               name                 type            type - 1 - это папка, 0 - это товар
      1              0                 Категория 1             1
      2              1             Подкатегория 1.1         1
      3              2                   Товар 1                  0
      4              2                   Товар 2                  0
      5              1             Подкатегория 1.2         1
      6              5           Подкатегория 1.2.1        1
      7              6                  Товар 1                   0
      8              6                  Товар 2                   0
И т.д.

Если структура правильная, то как сделать цикл подсчета?
 

Василий М.

Новичок
1. добавить в таблицу категорий поле для хранения кол-ва записей в категориях. в моем случае это поле называется category_advert_count
2. Вешаешь код ниже на крон и запускаешь раз в Н минут.

UPD: у тебя сделано все криво, категории и товары хранятся в одной таблице. в моем примере есть таблица категорий и объявлений. но не суть важно, перепишешь это не сложно.

код (код написан на базе моей библиотеки для работы с mysql, перепишешь под себя как нужно):
PHP:
$result = $db->query('SELECT `id` FROM `category` ORDER BY id ASC');

// для каждой категории считаем кол-во объявлений
     if ($result->getNumRows()) {
        while ($id = $result->getOne()) {
            $c_result = $db->query('UPDATE `category` SET `category_advert_count` = (
                SELECT COUNT(*) FROM `advert` WHERE `advert_category` = ?i
            ) WHERE `id` = ?i', $id, $id);
        }
    }

    function tree(Krugozor_Database_Mysql $db, $pid=0)
    {
        $result = $db->query('SELECT `id`, `category_advert_count` FROM `category` WHERE `pid`=?i', $pid);
        $count_all = 0;

        if ($result->getNumRows()) {
            while ($data = $result->fetch_assoc()) {
                $count = 0;
                $count += $data['category_advert_count'];
                $count += tree($db, $data['id']);
                $count_all += $count;

                $db->query('UPDATE `category` SET `category_advert_count` = ?i WHERE id = ?i', $count, $data['id']);
            }
        }

        return $count_all;
    }

    tree($db);
и все )
 
Сверху