SQL - запрос для подсчета количества комментариев в разделе

программирование MySQL sql форум База данных

Есть MySQL БД с такими таблицами:

forums {id, title}
sections {id, parent_forum}
topics {id, parent_section}
comments {id, parent_topic}

Иерархия forums->sections->topics->comments. Коротко говоря, в каждом колене указан id предка.

Прошу сильно не пинать, с SQL работаю мало. Вот попытка подсчитать количество строк в таблице comments:

SELECT COUNT(C.id), COUNT(T.id)
FROM sections AS S, topics AS T, comments AS C
WHERE C.parent_topic = T.id
AND T.parent_section = S.id
AND S.parent_forum = 1;

Возвращает не то. Великий гугле меня не поймет, если это все в поиск вбить, так что прошу просьбы у знатоков.

Примечание:
Попробовал count( distinct table.id ), выводит ошибку "Column 'comments.id' in field list is ambiguous"

Поискал мануалы, наткнулся на такой пример
COUNT(DISTINCT name) - кол-во записей с разными name не равными NULL

Следовательно, это не то - нужно не разные строчки, а разные колонки (хотя, может, ошибка в другом).

Примечание:
"хм, попробуйте подзапросами, да они мне самому не нравятся, но это решение проблемы самой мало кровью"

Если учесть, что на форуме может быть около десяти разделов, в каждом по сотни тем, в каждой теме - по сотне комментариев, то подзапросов выйдет огромное количество. Просто необходимо (!) сделать все в одном запросе (думаю, это реально).

Примечание:
"нужно не comments.id а С.id (с алиасом, а не названием таблицы.) "

Где вы нашли "comments.id"?...

Примечание:
"Я бы Вам посоветовал изменить структуру базы данных"

Такая мысль была, но я ее почему-то отбросил... Вот еще раз задумался, и не нашел явных минусов. Комментарий slo_nik можно считать лучшим вариантом, если найдется еще что-то, вопрос будет дополнен.
Ответы:
по такому запросу должен выводить одинаковый COUNT, попробуйте count( distinct table.id )
хм, попробуйте подзапросами, да они мне самому не нравятся, но это решение проблемы самой мало кровью
нужно не comments.id а С.id (с алиасом, а не названием таблицы.)
Я бы Вам посоветовал изменить структуру базы данных


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.