|
|
|
| собсно, имеется таблица news (id_news, title, text, putdate), где id_news - это уникальный идентификатор новости (первичный ключ) и таблица comments (id_comment, id_news, nick, text, putdate) - здесь id_comment уникальный идентификатор комментария, а id_news - это номер новости из первой таблицы. так вот вопрос такой: можно ли одним запросом сделать выборку последних 20 новостей из базы данных и сразу же подсчитать количество комментариев к каждой из этих 20 новостей? или же для каждой новости придется делать отдельный запрос? как выбрать последние 20 новостей я примерно знаю ("SELECT * FROM news ORDER BY putdate DESC LIMIT 20" - кажется, так, если не ошибаюсь), а вот как этим же запросом посчитать комментарии - понять не могу.
буду очень признателен, если кто-нибудь даст ответ на мой вопрос | |
|
|
|
|
|
|
|
для: Keks
(28.08.2008 в 13:23)
| |
SELECT n.*, COALESCE(cnt, 0) as cmtcnt
FROM news n
LEFT JOIN
(SELECT id_news, COUNT(id_comment) as cnt
FROM comments
GROUP BY id_news) as ct
ON n.id_news = ct.id_news
ORDER BY n.putdate DESC
LIMIT 20
|
| |
|
|
|
|
|
|
|
для: Keks
(28.08.2008 в 13:23)
| | SELECT id_news, title, text, putdate,
ifnull((select count(*) from comments where comments.id_news=news.id_news),0) as comments
FROM news
ORDER BY putdate DESC LIMIT 20
как то так | |
|
|
|
|
|
|
|
для: ronin80
(28.08.2008 в 13:33)
| | Давненько это было... но решил записать такой вариант, если кому-то понадобится:
SELECT n.*,COUNT(c.category) AS cmtcnt
FROM news n
LEFT JOIN comments c ON c.id_news = n.id_news
GROUP BY n.id_news
ORDER BY putdate DESC LIMIT 20
|
Минимум нагрузки на процессор | |
|
|
|