regi
Новичок
Выборка из трех таблиц + count, nested sets
Есть три таблицы:
cat(cid, cleft, cright, clevel)
cat_info(cid, ctitle, ..еще поля..)
articles(cid, aid, atitle, ..еще поля..)
cat и cat_info основные таблицы - в cat хранится дерево по алгоритму nested sets. В cat_info хранится остальная информация по разделу, типа названия и т.п.
В articles хранятся статьи
, которые привязаны к категориям по cid естественно.
Необходимо вывести подразделы выбранного раздела и для каждого указать кол-во детей(не полное, а clevel+1) и кол-во статей(тоже только для данного подраздела). Что-то такое:
Основные статьи(Категорий: 3, Статей:2)
Еще статьи(Категорий: 12, Статей:21) и т.п.
Посчитать кол-во статей для подразделов данного раздела я могу таким запросом:
Выбрать все подразделы данного раздела так:
Подсчитать число детей для каждого подраздела (делаю это в цикле при получении данных из результата второго приведенного запроса):
Возможно ли выбрать подразделы и посчитать количество детей одним запросом, (а не в цикле, как это делаю сейчас я) А так же второй вопрос(и главный) - как объеденить первый и второй запросы, которые я написал здесь?
-~{}~ 31.03.06 00:07:
Щас нашел в мануале пример, странно что раньше не замечал
Выборку из трех таблиц, но без подсчета детей подразделов, сделал так:
Таким запросом можно пользоваться?
И остается открытым вопрос по поводу подсчета детей для каждого из подразделов.
Есть три таблицы:
cat(cid, cleft, cright, clevel)
cat_info(cid, ctitle, ..еще поля..)
articles(cid, aid, atitle, ..еще поля..)
cat и cat_info основные таблицы - в cat хранится дерево по алгоритму nested sets. В cat_info хранится остальная информация по разделу, типа названия и т.п.
В articles хранятся статьи

Необходимо вывести подразделы выбранного раздела и для каждого указать кол-во детей(не полное, а clevel+1) и кол-во статей(тоже только для данного подраздела). Что-то такое:
Основные статьи(Категорий: 3, Статей:2)
Еще статьи(Категорий: 12, Статей:21) и т.п.
Посчитать кол-во статей для подразделов данного раздела я могу таким запросом:
PHP:
SELECT cid, COUNT(aid) FROM cat LEFT JOIN articles USING(cid) WHERE cat.cleft>=$my_cleft AND cat.cright<=$my_cright AND cat.clevel=$my_clevel GROUP BY cid;
PHP:
SELECT cat.cid, cat_info.* FROM cat LEFT JOIN cat_info USING(cid) WHERE cat.cleft>=$my_cleft AND cat.cright<=$my_cright AND cat.clevel=$my_clevel;
PHP:
SELECT cid FROM cat WHERE cleft>$row['cleft'] AND cright<$row['cright'];
-~{}~ 31.03.06 00:07:
Щас нашел в мануале пример, странно что раньше не замечал

Выборку из трех таблиц, но без подсчета детей подразделов, сделал так:
PHP:
mysql> SELECT cat.cid, count(articles.aid), cat_info.ctitle FROM cat LEFT JOIN articles USING(cid) LEFT JOIN cat_info US
ING(cid) WHERE cat.cleft>=$my_cleft AND cat.cright<=$my_cright AND cat.clevel=$my_clevel GROUP BY cid;
