【问题标题】:Adding a extra subquery to MySQL query向 MySQL 查询添加额外的子查询
【发布时间】:2021-02-03 21:05:21
【问题描述】:

所以我有 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 |用户名 |最后一个时间戳
1 |开发商 | 1601826378

2 | BetaTester | 1601826301

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

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

【问题讨论】:

    标签: mysql sql join subquery


    【解决方案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
    

    【讨论】:

    • 谢谢,但是当我尝试这个时,我得到“无法在 'max_mid' 上分组”
    • @TRicks,更新了我的答案
    【解决方案2】:

    我有点困惑,既然你已经得到了 last_timestamp 为什么不直接离开加入消息表呢。

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

    然后选择消息栏

    select m2.message
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多