gpt4 book ai didi

mysql - 在mysql中选择两个用户通信之间的最新消息

转载 作者:可可西里 更新时间:2023-11-01 07:01:34 25 4
gpt4 key购买 nike

我有一个简单的表来维护用户之间的消息。表结构看起来像

     sender    receiver   message   sendtime
1 2 m1 2012-01-01 12:12:12
2 1 m2 2012-01-01 12:50:20
1 2 m3 2012-01-01 12:55:55
1 3 m4 2012-01-02 05:05:05
1 4 m5 2012-01-05 05:20:20
4 1 m6 2012-01-06 06:05:00
4 1 m7 2012-01-07 11:11:11
2 4 m8 2012-01-08 05:01:01

现在,对于 ID 为 1 的用户,我需要这样的结果

    sender     receiver   message   sendtime
1 2 m3 2012-01-01 12:55:55
1 3 m4 2012-01-02 05:05:05
4 1 m7 2012-01-07 11:11:11

也就是说,我需要特定用户的最新消息,无论他是发送者还是接收者。

虽然这看起来很容易,但我找不到编写单个 mysql 查询的方法。

此外,如果对于这种解决方案,我的表格设计很差,我想提出建议。

注意:有一件事,我想我应该提到的是,例如用户 1 和用户 2 之间有多次通信。我需要他们两个之间的最新通信,无论用户 1 是发送者还是接收者,只有最近的。

大多数用户都建议查询,这将带来一条记录,发送者 1、接收者 2,然后是发送者 2、接收者 1。我不需要这两条记录,因为这是同一用户 1 和用户 2 之间的通信.我需要一个最新的一个给每个其他用户指定的用户。

谢谢,

最佳答案

SELECT data.* FROM 
(SELECT MAX(sendtime) AS sendtime
FROM data
WHERE 1 IN (sender,receiver)
GROUP BY IF (1 = sender,receiver,sender)) AS latest
LEFT JOIN data ON latest.sendtime = data.sendtime AND 1 IN (data.sender, data.receiver)
GROUP BY IF (1 = data.sender,data.receiver,data.sender)

我建议在您的表中使用唯一序列 ID 以避免外部 GROUP BY。如果您有递增的唯一 message_id(即更大的 message_id 对应于以后的 sendtime),查询会简单得多:

SELECT data.* FROM 
(SELECT MAX(message_id) AS message_id
FROM data
WHERE 1 IN (sender,receiver)
GROUP BY IF (1 = sender,receiver,sender)) AS latest
LEFT JOIN data USING(message_id)

关于mysql - 在mysql中选择两个用户通信之间的最新消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11095024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com