Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мультикатегории и подсчёт данных в них 
:(
    Опции темы
Fortop
Дата 27.3.2012, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(ksnk @  27.3.2012,  14:41 Найти цитируемый пост)
Хотя сначала надо сделать систему кэширования результатов подсчета, так как эффективная схема хранения данных все равно от этого не спасет. 

Куда с кешированием-то торопится?
ТС не указал даже как часто ему это надо вычислять smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ksnk
Дата 27.3.2012, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Цитата(Fortop @  27.3.2012,  14:46 Найти цитируемый пост)
ТС не указал даже как часто ему это надо вычислять

Эти числа, imho, должны появляться при любом выводе таблицы категорий. То есть - часто ;), на каждой странице с товаром.
Вычисленные значения, вероятно, удобнее хранить прямо в таблице категорий


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 27.3.2012, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(ksnk @  27.3.2012,  14:41 Найти цитируемый пост)
Надо бы смотреть в сторону nested sets, для хранения дерева категорий. Там задача вычисления чилдов решается в один простой запрос

зато задача добавления не в один))

PM MAIL   Вверх
skyboy
Дата 27.3.2012, 22:20 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(ksnk @  27.3.2012,  13:57 Найти цитируемый пост)
Вычисленные значения, вероятно, удобнее хранить прямо в таблице категорий 

Цитата(skyboy @  26.3.2012,  22:59 Найти цитируемый пост)
в самой категории хранить счетчик "товаров в категории". 

попытка номер два.
PM MAIL   Вверх
Serious2008
Дата 29.3.2012, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Снова здравствуйте.

Вот у меня где загвоздка, правда прошу помощи, причём желательно в виде кода.
Первый массив, это все категории где могут быть данные, например товары. Мне нужно посчитать, сколько этих товаров содержится во всех категориях по выше стоящему, второй массив это как бы древо, в котором содержатся ветки. Т.е. 0 это корень, от неого отходят 1,3,5,6,7,8. Потом от 1 отходит 2,4, от 2 отходит 10 и ещё от 5 отходит 9. Предположим что в 10 у нас один товар, а в 4-ом 3. то тогда в 1-ом должно получиться 4 по простой логике, но дело в том, что там может один и тот же товар быть и в 4-ой и в 10-ой категории. И тогда в 1 у нас должо получиться 3 товара. А если и в 9-ом тоже один какой-нибудь товар хранящийся в 4, то тогда в 0 должно получится тоже 3 товара. Но допустим в 0 можно пихать все товары и тут как бы не сложно посчитать. А вот как быть с детьми я не знаю. Ниже пример массивов
Код


Array
(
    [0] => 10
    [1] => 4
    [2] => 3
    [3] => 9
    [4] => 6
    [5] => 7
    [6] => 8
)
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 5
            [3] => 6
            [4] => 7
            [5] => 8
        )

    [1] => Array
        (
            [0] => 2
            [1] => 4
        )

    [2] => Array
        (
            [0] => 10
        )

    [5] => Array
        (
            [0] => 9
        )

)

PM MAIL   Вверх
Fortop
Дата 30.3.2012, 07:41 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Serious2008, для каждой категории выберите список ее детей (всех) и дальше делайте агрегацию запросом

т.е. будет что-то вида

Код

select sum(item_count) from item_list where item_list.id IN (
    SELECT id FROM item_in_cat WHERE item_in_cat.cat_id IN (тут список всех детей вашей категории))


Это сообщение отредактировал(а) Fortop - 30.3.2012, 07:41


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
baldina
Дата 1.4.2012, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Serious2008, Вам нужно обойти дерево (поиск в глубину, рекурсивно). Каждому элементу массива (узлу дерева) ставите в соответствие число товаров. При покидании узла 
1. если этот узел слдержит товар - присваиваете числу товаров 1
2. прибавляете к числу товаров сумму товаров поддеревьев
попробуйте сами, не получится - поможем с кодом
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.