У меня есть таблица MySQL articles
, в которой я организовал содержимое в следующей иерархии:
- Раздел
- Тема
- Глава
- Сообщение
Каждый элемент из вышеперечисленного находится в строке с полями: id
, parent
, name
и т. Д.
Строка сообщения parent
равна строке главы id
, строка главы parent
равна строке темы id
и строке темы parent
равна строке раздела id
.
У меня нет более высокой иерархии, чем выше.
Мне нужно выбрать список предметов в данном разделе вместе с количеством всех детей по каждому предмету. Количество является суммой количества глав-потомков и их потомков, которые являются постами.
Мой брат помог мне со следующим запросом выбора. Однако он относительно медленный - ~ 0,6 секунды.
SELECT
subjects.id,
subjects.name,
subjects.link,
(
SELECT
COUNT(DISTINCT posts.id)
FROM
articles AS chapters,
articles AS posts
WHERE
chapters.parent = subjects.id AND(
posts.parent = chapters.id OR posts.parent = subjects.id
)
) AS child_count
FROM
articles AS subjects
WHERE
subjects.parent = 62
Мне нужна помощь с улучшением производительности, пожалуйста.
Большое спасибо !!