Возникла такая задача. Есть таблица со статьями (articles) и таблица с комментами с ней (comments). Необходимо вывести заголовки статей и в скобках количество комментов к каждой статье. Как это можно оптимально сделать? Может добавить в таблицу articles дополнительное поле number_comments, где будет количество комментов к каждой статье? Или каким-то образом можно нетрудоемко считать на лету при выводе это число комментов для статей?
можно и так и так. есил ожидается посетителей мало - то считайте налету. если нагрузка будет большая то сделайте отдельное поле, но тогда при любом изменении кол-ва комментов надо незабывать обновлять его. или написать триггер
да. только надо незабывать обновлять его когда: добавляют новые комменты, редактируют старые(меняют видимость), удаляют. когда это делают пользователи, или в админке. еще когда это делается через ajax каким нибудь плагином... и т.д. хорошо когда эти манипуляции описаны в одном файле или классе)
Понял, сделаю поле-счетчик. Добавлено спустя 3 минуты 57 секунд: А как вообще это делается? Можно пример для наглядности? Например, есть таблицы articles (поля: id_article, title, text) и comments (поля: id_comment, id_article, text). Как должен выглядеть запрос для вывода заголовков статей и кол-ва комментов к ним?
ну ты когда в БД пишешь сам коммент, пишешь id новости, к которой этот коммент, ну вот и в этой новости делаешь столбец count и "плюсадинишь" его при добавлении нового коммента и "минусодинишь" при удалении.
SELECT A.id_article, count(C.id_article) cnt FROM articles A LEFT JOIN comments C ON C.id_article=A.id_article GROUP BY A.id_article
Код (Text): SELECT `articles`.*, IF(`id_comment` IS NULL, 0, COUNT(*)) AS `comments_count` FROM `articles` LEFT JOIN `comments` USING(`id_article`) GROUP BY `articles`.`id_article`;