2013-04-18 3 views
1

Я хочу, чтобы иметь возможность получить последнее сообщение, сделанное пользователем, в каждой комнате приложения. Однако, с запросом, который я построил, я все время извлекаю первый из них?Получить последнее сообщение в каждой комнате с SQL

Таблицы выглядеть следующим образом

Rooms 
id|name|subname 

Posts 
id|title|description|id_room|date_posted 

Что я отсутствующий или делать здесь не так?

SELECT * FROM rooms AS rm 
INNER JOIN posts AS pst ON pst.id_room = rm.id 
WHERE pst.id = ( 
SELECT MAX(pst.id) FROM posts) 
GROUP BY rm.id 

Спасибо

+0

Можете ли вы объяснить немного больше о том, как выглядит остальная часть вашей базы данных и пример использования? – bplattenburg

+0

Только что отредактировал с информацией о таблице –

+0

'SELECT pst.id_room, pst.id, max (дата-отправлено) из сообщений pst group by pst.id_room, pst.id;' Я так думаю, это то, что вам нужно ??? – Meherzad

ответ

2

что-то подобное должно быть лучше (ваш запрос будет просто получить MAX pst.id, а не MAX pst.id по комнате)

select * from rooms as rm 
inner join posts as pst on pst.id_room = rm.id 
where pst.id in (select max(pst.id) from posts 
       group by pst.id_room) 

упрощенный SqlFiddle, с ваш запрос и мой.

+0

Он по-прежнему возвращает первое сообщение ... и да, я хочу результат для каждой комнаты в таблице базы данных, следовательно, соединение –

+1

@ JoãoDias см. SqlFiddle в моем ответе, что-то отличное от того, что вы иметь ? –

+0

Это, кажется, работает из того, что я могу сказать. – bplattenburg

Смежные вопросы