У меня есть такая таблица для простого чата:
messages table structure
+----+---------+-----------+---------+------+------+
| id | to_user | from_user | message | read | sent |
+----+---------+-----------+---------+------+------+
И мне нужно получить список каждого разговора, который выглядит следующим образом
Username ---- Message ---- Date
Я использую этот запрос длясделайте это:
SELECT *
FROM `messages`
WHERE `sent`
IN (
SELECT MAX( `sent` )
FROM `messages`
WHERE `from_user` = '1' --id of user who is requesting the list
OR `to_user` = '1' --id of user who is requesting the list
GROUP BY `to_user` , `from_user`
)
LIMIT 0 , 30
И это работает почти нормально, моя проблема в том, что он возвращает мне не последнее сообщение этого разговора, а последнее сообщение от каждого пользователя, так скажем, пользователь 1
и 2
говорит, и я получаю этот список, вот что я получаю:
+----+---------+-----------+-----------------------+------+---------------------+
| id | to_user | from_user | message | read | sent |
+----+---------+-----------+-----------------------+------+---------------------+
| 3 | 2 | 1 | Message 1 from user 1 | 0 | 2012-01-11 13:20:54 |
| 4 | 1 | 2 | Message 1 from user 2 | 0 | 2012-01-11 13:24:59 |
+----+---------+-----------+-----------------------+------+---------------------+
И я хотел бы получить только последнее сообщение, которое 4 , потому чтоПоле sent
является самым высоким в 4-й записи, так как я могу его решить?
РЕДАКТИРОВАТЬ После удаления group by
я получаю только одно сообщение, даже если пользователь говорил с болееодин пользователь