向 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
所以我有 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