Выборка последних комментариев в тредах

rj45

Новичок
Структура базы.

PHP:
create table page (
id int, //номер станицы
content text //содержимое
)

create table comments (
page_id int, //номер страницы
id int, //номер комментария
content text //содержимое комментария
)

create table listen ( //содержит на какую страницу подписан пользователь
page_id, //номер страницы
user_id //номер пользователя
)
Задача: Выбрать по одному последнему комментарию с каждой темы на которую подписан пользователь.

Мозг вывихну... наверное надо выспаться
 

Redjik

Джедай-мастер
PHP:
SELECT c.id,c.content FROM comments AS c
INNER JOIN listen AS l ON l.page_id = c.page_id   //не люблю USING
WHERE l.user_id = :user_id AND c.id IN 
    (SELECT MAX(id) FROM comments GROUP BY page_id)
зы. не проверял на базе, может где ошибся =)

зыы. так же за производительность не запаривался, буду благодарен за носотыкательные комменты
 

2XZ

Новичок
GROUP BY Зачем ? Лишнее расходование ресурсов если выполняется.

Можно еще так
PHP:
SELECT c.id,c.content FROM comments AS c
INNER JOIN listen AS l ON l.page_id = c.page_id   //не люблю USING
WHERE l.user_id = :user_id AND exists 
    (SELECT MAX(id) FROM comments c1 inner join listen l2 on l.page_id = c.page_id  where l2.user_id = l.user_id )
или так
PHP:
SELECT c.id,c.content FROM comments AS c
INNER JOIN listen AS l ON l.page_id = c.page_id   
inner outer join (SELECT MAX(id) id FROM comments) iv on c.id = iv.id
WHERE l.user_id = :user_id

Посмотри что будет быстрее при больших объемах.
 

2XZ

Новичок
:)
PHP:
SELECT c.id,c.content FROM comments AS c
INNER JOIN listen AS l ON l.page_id = c.page_id   
inner  join (SELECT MAX(id) id FROM comments GROUP BY page_id) iv on c.id = iv.id
WHERE l.user_id = :user_id
 

Redjik

Джедай-мастер
alekciy
все дело в том, что по непонятным мне причинам, в 5 случаях из 10, когда я пишу USING получаю mysql Error near USING, причем синтаксис верный...
скорее всего дело в руках =)
 

alekciy

Новичок
alekciy
все дело в том, что по непонятным мне причинам, в 5 случаях из 10, когда я пишу USING получаю mysql Error near USING, причем синтаксис верный...
скорее всего дело в руках =)
...или в различных именах столбцов в таблицах.
 
Сверху