Есть 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 можно считать лучшим вариантом, если найдется еще что-то, вопрос будет дополнен.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.