mysql - 选择每个对话的最新消息

标签 mysql sql select group-by chat

我有两个表:

聊天(from 就是发送第一条消息的人)

id | id_from | id_to
1  | 1       | 2
2  | 1       | 3
3  | 3       | 2
4  | 4       | 1

消息

id | content | date                | id_chat | id_from | id_to
1  | hi      | 2017-10-04 23:14:41 | 1       | 1       | 2
2  | hello   | 2017-10-04 23:15:03 | 1       | 2       | 1
3  | heey    | 2017-10-04 23:40:00 | 4       | 4       | 1

我想获取每次对话的最后一条消息。

我试过了(1 是用户登录的 id):

SELECT MAX(id) AS idMessage, id_from, id_to, content, date 
FROM message 
WHERE 1 IN (id_from, id_to) 
GROUP BY id_chat
ORDER BY idMessage 
DESC LIMIT 10

我正在获取最新的对话,但我收到的是每个对话的第一条消息,而不是最后一条。如何获取最后一条消息?

最佳答案

select m1.*
from messages m1
join
(
  SELECT MAX(id) as id
  FROM message
  GROUP BY id_chat
) m2 on m1.id = m2.id

关于mysql - 选择每个对话的最新消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50712857/

相关文章:

php - 如何从传递给 php 查询请求的 jquery 获取 VAR

php - 从 mysql DB 检索数据不起作用/PHP

mysql - 为什么如果我创建一个 varchar(65535),我得到一个 mediumtext?

mysql - 有效地存储一堆外键(序列化与新表)

mysql - 使用mySQL计算3个表之间的元素数量

sql - 将嵌套键值添加到 Postgres 中的 JSONB

python - 从我的 Django 应用程序中的数据库中选择数据

mysql - Select 语句的子查询出错

php - Varchar 类型的 MySql 复合唯一索引

javascript - 检测哪个输入/选择被更改并获取其值