@serious911

Подсчет количества элементов в категориях и подкатегориях (SQL)?

Возникла проблема с подсчетом количества элементов в категориях и подкатегориях. В каждой категории есть подкатегории, а в подкатегориях есть свои подкатегории. Количество таких уровней неограничено. Записи хранятся в самой "нижней" категории. Категории и записи представлены в виде отдельных таблиц в базе данных.

Структура таблиц примерно такая:

Categories
-------------
id
parent_id
....

Posts
-------------
id
....
category_id
.....


Необходимо посчитать количество элементов в каждой категории включая подкатегории. Все это можно представить в виде дерева и теоритически можно рекурсивно посчитать количество элементов в вершине дерева. Но проблема в том, как это сделать в виде SQL запросов к БД, чтобы не сильно грузить ее. Возможно как-то изменить структуру таблиц?

Для отдельной категории сделал примерно так:
SELECT categories.*,(SELECT COUNT(posts.id) FROM posts WHERE posts.category_id = categories.id) AS count FROM categories WHERE 1


Спасибо.
  • Вопрос задан
  • 1371 просмотр
Пригласить эксперта
Ответы на вопрос 3
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
может Вам поможет ROLLUP?
Ответ написан
Комментировать
@heartdevil
плыву как воздушный шарик
Привет.
Так-с. А если вот так примерно? Запрос не тестил. Просто как идея. На вскидку...
SELECT par.Id, COUNT(po.id) AS postCount
FROM Categories AS par
INNER JOIN Categories AS sub ON par.id = sub.parent_id
INNER JOIN Posts AS po ON po.id = sub.id
GROUP BY par.Id
Ответ написан
Комментировать
kimono
@kimono
Web developer
Копайте в сторону nested sets для таблицы категорий. Тогда все будет значительно проще.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы