Задать вопрос
@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


Спасибо.
  • Вопрос задан
  • 1394 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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 для таблицы категорий. Тогда все будет значительно проще.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽