Подсчет количества товаров в каждой ветке дерева каталога
Допустим у Вас имеется каталог на сайте. Коталог состоит из дерева разделов, в каждой ветке которого может быть N-ое кол-во товаров.
Например имеется дерево:
--Телевизоры
---- Sony
-------Trinitron
-------Megatron
-------Valtron
---- Toshiba
---- Rolsen
Нужно показывать кол-во товаров суммарно от текущей ветки до последней включительно. Допустим что модель SONY делится еще на три под рубрики, а вот Тошиба и Ролсен — нет, а нам надо знать сколько в каждой рубрике товаров, причем если это самая верхняя ветка — то показывать суммарно кол-во товаров от вех дочерних разделов:
function getAllCountItems_inTree($pid, $sum) { global $DB; if ($sum==0) $sum = $DB->getOne('SELECT count(*) FROM mp_table_items WHERE art_id = "'.$DB->pre((int)$pid).'"'); $all = $DB->getAll('SELECT id FROM mp_table_articles WHERE parent="'.$DB->pre((int)$pid).'" AND active=1'); if (sizeof($all)) { foreach ($all as $num => $item) { $cnt = $DB->getOne('SELECT count(*) FROM mp_table_items WHERE art_id = "'.$DB->pre((int)$item['id']).'"'); $sum = $sum + $cnt; $sum = getAllCountItems_inTree((int)$item['id'], $sum); } } return $sum; } // NODE_ID - ID ветки в дереве, по которой будет спуск вниз по ее детям echo getAllCountItems_inTree(NODE_ID, 0);
Передавая NODE_ID при построении дерева, мы получим кол-во товаров на всю ветку и ниже для «детей» «родителя»
Возможно это не самый лучший способ подсчета, но это вариант для размышления над более новыми методами подсчета.
можно использовать всякие способы кеширования вывода например Memcache, о котором будет рассказано чуть позже.
и в результате получится:
--Телевизоры (26)
---- Sony (13)
-------Trinitron (3)
-------Megatron (4)
-------Valtron (6)
---- Toshiba (5)
---- Rolsen (8)
Последние комментарии