向 MySQL 查询添加额外的子查询

Adding a extra subquery to MySQL query

所以我有 2 tables,用户和消息

用户table


uid,用户名

条消息 table


mid、senderid、receiverid、消息、时间戳

我现在的查询是检索每个聊天对话的 uid、用户名和最后时间戳

SELECT DISTINCT 

IF (messages.senderid = '5e9b95786a71f8.25790415', messages.receiverid, messages.senderid) as uid, 

(SELECT username FROM users WHERE uid = IF (messages.senderid = '5e9b95786a71f8.25790415', messages.receiverid, messages.senderid)) as username, 

MAX(messages.timestamp) as last_timestamp

FROM messages JOIN users ON users.uid = messages.senderid WHERE messages.senderid = '5e9b95786a71f8.25790415' OR messages.receiverid = '5e9b95786a71f8.25790415'

GROUP BY 1,2

下面的输出

uid |用户名 | last_timestamp
1 |开发商 | 1601826378

2 |测试员 | 1601826301

我需要添加到此查询的是基于我在输出中的 last_timestamp 的消息字段。

如何更新查询以包含额外的消息字段?

试试这个。

select A.uid, C.username, B.timestamp, B.message from (SELECT DISTINCT 

IF (messages.senderid = '5e9b95786a71f8.25790415', messages.receiverid, messages.senderid) as uid,

MAX(messages.mid) as max_mid

FROM messages WHERE messages.senderid = '5e9b95786a71f8.25790415' OR messages.receiverid = '5e9b95786a71f8.25790415'

GROUP BY 1) A join messages B on A.max_mid = B.mid join users C on A.uid = C.uid

我有点困惑,既然你已经知道了 last_timestamp 为什么不再次留下加入消息 table。

left JOIN messages m2 on last_timestamp = m2.timestamp and mid = m2.mid

还有 select 消息栏

select m2.message