Есть таблица каталога товаров Код (Text): CREATE TABLE IF NOT EXISTS `cat` ( `cat_id` int(4) NOT NULL AUTO_INCREMENT, `cat_papa` int(4) DEFAULT NULL, `cat_name` varchar(50) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`cat_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin ; Есть таблица товаров с привязкой к таблице каталога по tov_cat Код (Text): CREATE TABLE IF NOT EXISTS `tovar` ( `tov_id` int(10) NOT NULL AUTO_INCREMENT, `tov_cat` int(4) NOT NULL, `tov_nazv` varchar(100) COLLATE utf8_bin NOT NULL, `tov_cena` varchar(100) COLLATE utf8_bin NOT NULL, `tov_opis` text COLLATE utf8_bin NOT NULL, `tov_kolvo` varchar(40) COLLATE utf8_bin NOT NULL, `tov_owner` int(10) DEFAULT '0', PRIMARY KEY (`tov_id`) ) ; Хочу вывести все корневые категории (у которых cat_papa=0) и подсчитать количество товаров которые привязаны ко всем вложенным подкатегориям Пробую сделать вот так: Код (Text): SELECT cat.cat_id, cat.cat_name, t.count FROM ( SELECT tov_cat,count(*) count FROM tovar WHERE tov_owner=30 GROUP BY tov_cat ) t LEFT JOIN cat cat on cat.cat_id = t.tov_cat Получаю результат подсчета но на самом нижнем уровне вложенности, а можно ли средствами MYSQL пройтись по всему циклу и дойти до самого верха? Или только через циклы в php постоянно делая запросы к MySQL?
Re: Рекурсивный подсчет количества товаров во вложенных кате 1. (по теме) на nested sets смотрели? 2. (не по теме) почему цена и кол-во до сих пор строковыми полями 3. (не по теме) почему все строковые поля сопоставляются как двоичный юникод? 4. (не по теме) почему идентификаторы категории/родителя указываются как int длиной представления 4 символа? 5. (не по теме) зачем отрицательные идентификаторы? на практике такое полезно?
Re: Рекурсивный подсчет количества товаров во вложенных кате А без изменения структуры таблицы БД никак не обойтись? Вот так как сейчас есть можно ли сделать какой то запрос что бы вывести названия корневых категорий и количество товаров во всех вложенных категориях. В MySQL вроде есть циклы, но я не силен в них. был бы благодарен за помощь.
Re: Рекурсивный подсчет количества товаров во вложенных кате вы пытаетесь делать иерархическую структуру в реляционной субд. вложенные множества реализуют иерархическую структуру и позволяют легко работать со всем деревом. в том числе и самостоятельно отслеживают свою целостность. в случае обычной пары элемент+родитель вам как раз и приходится придумывать извращенные решения по тому как смотреть на дерево вверх/вниз относительно текущей позиции в графе. что для нс было бы тупо поделить уменьшенную на единицу разницу между ключами исследуемого "родителя". впрочем у вас цена и кол-во тектовыми полями. ожидать от вас использования нс наверное слишком... извините за неуместный совет.
Re: Рекурсивный подсчет количества товаров во вложенных кате Я в MySQL не силен, если переходить на nested sets то это затронет много файлов. Мне всего в одном месте надо вывести количество товаров во всех вложенных папках. Возможно ли сделать это на MySQL в принципе для таблиц указанных выше? Был бы признателен за пример запроса.
Re: Рекурсивный подсчет количества товаров во вложенных кате одним запросом никак. а буквально рекурсивную функцию написать ты наверное и сам сумеешь.
Re: Рекурсивный подсчет количества товаров во вложенных кате Если бы мог написал бы. Меня интересует без изменения структуры таблицы возможно ли сделать то что я хочу? Буду благодарен за помощь.
Re: Рекурсивный подсчет количества товаров во вложенных кате Просто добавь еще одно поле - самого первого родителя в категории. Но это костыль.
Re: Рекурсивный подсчет количества товаров во вложенных кате возможно. например так: http://stackoverflow.com/a/10994181/272885