Выбор данных, где поля совпадают - PullRequest
0 голосов
/ 17 января 2012

Итак, у меня есть эта структура таблицы

+----+---------+-----------+---------+------+---------------------+
| id | to_user | from_user | message | read | sent                |
+----+---------+-----------+---------+------+---------------------+
|  1 |      2  |        1  | test    |    0 | 2012-01-11 13:20:14 |
+----+---------+-----------+---------+------+---------------------+

И, как вы можете видеть, я использую это для очень простого чата, и теперь я хочу получить список каждой беседы. Поэтому мне нужно найти способ выбора одного последнего сообщения из разговора каждого пользователя. поэтому мне нужно что-то вроде

   select * 
   from `messages` 
   where `to_user` = 2 --(this is my user id)
          and `to_user` = `from_user` 
   LIMIT 1

Теперь я знаю, что LIMIT всегда будет возвращать 1 запись, и другая логика, вероятно, не так хороша, в любом случае, если кто-то получит то, что я хочу здесь, может помочь мне немного:)

1 Ответ

2 голосов
/ 17 января 2012

Подзапрос IN() выбирает id каждой строки, имеющей самый последний sent между двумя пользователями.Внешний запрос выбирает оставшиеся столбцы для каждого id, возвращенного из подзапроса.

В обновлении исправлено предложение HAVING ...

SELECT * FROM table WHERE id IN (
  SELECT id FROM table GROUP BY to_user, from_user HAVING sent = MAX(sent)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...