Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Можно ли одним запросом выбрать новости и подсчитать количество комментариев к ним?
 
 автор: Keks   (28.08.2008 в 13:23)   письмо автору
 
 

собсно, имеется таблица 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" - кажется, так, если не ошибаюсь), а вот как этим же запросом посчитать комментарии - понять не могу.
буду очень признателен, если кто-нибудь даст ответ на мой вопрос

  Ответить  
 
 автор: Trianon   (28.08.2008 в 13:29)   письмо автору
 
   для: 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

  Ответить  
 
 автор: ronin80   (28.08.2008 в 13:33)   письмо автору
 
   для: 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

как то так

  Ответить  
 
 автор: kosta_in_net   (24.01.2011 в 09:26)   письмо автору
 
   для: 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

Минимум нагрузки на процессор

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования