|
|
|
| Здравствуйте!
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 будет возвращать то что мне нужно. | |
|
|
|
|
|
|
|
для: prodigy
(30.09.2012 в 20:25)
| | Попробуйте использовать вариант COUNT(DISTINCT com.id) вместо COUNT(com.id). | |
|
|
|
|
|
|
|
для: cheops
(30.09.2012 в 20:34)
| | Спасибо!
работает, но слишком долго выполняется запрос. | |
|
|
|
|
|
|
|
для: prodigy
(30.09.2012 в 20:48)
| | > слишком долго выполняется запрос.
А зачем вы все это джойните? Еще бы он быстро выполнялся.
Попробуйте так:
/*<?*/
SELECT id_note
, ...
, (SELECT count(*) FROM comments WHERE id_note = n.id_note)comments
, (SELECT max(id_note) FROM notes WHERE id_note < n.id_note)prev_note
, (SELECT min(id_note) FROM notes WHERE id_note > n.id_note)next_note
FROM notes n
WHERE id_note=33992
|
| |
|
|
|
|
|
|
|
для: Sfinks
(30.09.2012 в 21:12)
| | ok, спасибо, завтра попробую по вашему совету...
так как я делал красивее (шутка)
(я думал что вложенные запросы выполняются ещё дольше) | |
|
|
|