У меня есть такая таблица для простого чата:запроса возвращает дополнительные строки
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 |
+----+---------+-----------+-----------------------+------+---------------------+
И я хотел бы получить только в прошлом сообщение , причина sent
поле самое высокое в 4-й записи, так как я могу его решить?
EDIT После удаления group by
я получаю только одно сообщение, даже если пользователь разговаривает с более чем одним пользователем
См. Мой ответ за * правильный * ответ (а не тот, который вы приняли, что не так) – Bohemian