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

Форум MySQL

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

 

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

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

тема: Немного сложный запрос - COUNT, MAX вместе возвращается результат не тот какой ждал
 
 автор: prodigy   (30.09.2012 в 20:25)   письмо автору
 
 

Здравствуйте!


SELECT n.id_note, ...,
 IFNULL( COUNT( com.id ) , 0 ) AS comments, MAX( prev.id_note ) AS prev_note, next.id_note AS next_note
FROM notes AS n
LEFT JOIN comments AS com ON ( com.id_note = n.id_note )
LEFT JOIN notes AS prev ON ( prev.id_note < n.id_note )
LEFT JOIN notes AS next ON ( next.id_note > n.id_note )
WHERE n.id_note =33992


IFNULL( COUNT( com.id ) , 0 ) AS comments вместо кол-ва комментариев для выбранной статьи почему-то возвращает другие цифры. если убрать prev и next то count будет возвращать то что мне нужно.

  Ответить  
 
 автор: cheops   (30.09.2012 в 20:34)   письмо автору
 
   для: prodigy   (30.09.2012 в 20:25)
 

Попробуйте использовать вариант COUNT(DISTINCT com.id) вместо COUNT(com.id).

  Ответить  
 
 автор: prodigy   (30.09.2012 в 20:48)   письмо автору
 
   для: cheops   (30.09.2012 в 20:34)
 

Спасибо!
работает, но слишком долго выполняется запрос.

  Ответить  
 
 автор: Sfinks   (30.09.2012 в 21:12)   письмо автору
 
   для: prodigy   (30.09.2012 в 20:48)
 

> слишком долго выполняется запрос.
А зачем вы все это джойните? Еще бы он быстро выполнялся.
Попробуйте так:
/*<?*/
SELECT id_note
     
, ...
     , (
SELECT count(*) FROM comments WHERE id_note n.id_note)comments
     
, (SELECT max(id_noteFROM notes WHERE id_note n.id_note)prev_note
     
, (SELECT min(id_noteFROM notes WHERE id_note n.id_note)next_note 
FROM notes n
WHERE id_note
=33992

  Ответить  
 
 автор: prodigy   (30.09.2012 в 22:33)   письмо автору
 
   для: Sfinks   (30.09.2012 в 21:12)
 

ok, спасибо, завтра попробую по вашему совету...
так как я делал красивее (шутка)
(я думал что вложенные запросы выполняются ещё дольше)

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

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