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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подсчет товаров и вывод дерева категорий 
:(
    Опции темы
Igor_CH
Дата 18.5.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Подскажите как правильно сделать.

Есть стандартное дерево категорий (ID PID).
В каждой категории (в подкатегории) есть свои товары своя таблица.

Как правильно сделать подсчет товаров в каждой категории? (дерево очень большое).

Делать объединение таблиц или же внутри дерева делать запрос на подсчет товаров (т.е. будет много запросов). Как правильно?

PM MAIL   Вверх
mishaSL
Дата 18.5.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

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



Igor_CH, до конца структуру вашей БД я так и не понял.
Цитата(Igor_CH @  18.5.2007,  18:40 Найти цитируемый пост)
сделать подсчет товаров

Вы имеете ввиду количество товаров в категории или что?
Цитата(Igor_CH @  18.5.2007,  18:40 Найти цитируемый пост)
Делать объединение таблиц или же внутри дерева делать запрос на подсчет товаров (т.е. будет много запросов).

Быстрее должно работать объединение таблиц в одном запросе, чем множество запросов.



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SelenIT
Дата 19.5.2007, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



mishaSL, чего ж в этой структуре непонятного? Дерево категорий в виде списка смежности в одной таблице, товары - в другой...

Igor_CH, конечно, лучше одним запросом. Вот проверенный пример построения дерева с одновременным подсчетом товаров в категориях и подкатегориях:
Код

function mk_tree($id) {
    global $tree;
    $html = '<ul>';
    $goods_count = 0;
    foreach($tree[$id] as $child) {
        $html .=  '<li>'.$child['name'];
        if (isset($tree[$child['id']])) {
            list($subtree_html, $goods_in_subtree) = mk_tree($child['id']);
        }
        else list($subtree_html, $goods_in_subtree) = array('',0);
        $goods_in_category = $child['items']+$goods_in_subtree;
        $html .= ' (товаров: '.$goods_in_category.')</li>'.$subtree_html;
        $goods_count += $goods_in_category;
    }
    $html .= '</ul>';
    return array($html, $goods_count);
}

$q = "SELECT c.id, c.pid, c.name, count(g.id) AS items FROM categories AS c LEFT JOIN goods g ON g.category_id = c.id GROUP BY c.id ORDER BY c.pid";

$r = mysql_query($qqq) or die(mysql_error());

$tree = array();
while ($f = mysql_fetch_assoc($r)) {
    $tree[$f['rubricid']][] = $f;
}
$res = mk_tree(0);
echo $res[0];
echo '<p>Всего: '.$res[1].'</p>';

P.S. Предполагается, что категории корневого уровня имеют PID=0. Дерево из >1000 категорий с (в общей сложности) >4700 товаров у меня строится за <0.1 c.

Это сообщение отредактировал(а) SelenIT - 19.5.2007, 04:24


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Igor_CH
Дата 21.5.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


 




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


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

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