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

时间:2020-10-21 01:10:00

标签: mysql sql join subquery

所以我有2个表,用户和消息

用户表


uid,用户名

消息表


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 | BetaTester | 1601826301

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

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

2 个答案:

答案 0 :(得分:1)

尝试一下。

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

答案 1 :(得分:0)

我有点困惑,因为您已经有了last_timestamp,为什么不再次离开联接消息表。

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

然后仅选择消息列

select m2.message