所以我有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。
如何更新查询以包括额外的消息字段?
答案 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