Mysql (My)SQL-用于显示最后一个收件箱中的邮件
所以希望这个问题没有被问到,但我没有发现 我的示例表如下所示: 对于我的SQL,例如,我知道用户ID 1,我想显示我的Messanger的收件箱,因为我需要知道用户ID 1是否收到消息或是消息的发件人 例如:Mysql (My)SQL-用于显示最后一个收件箱中的邮件,mysql,sql,Mysql,Sql,所以希望这个问题没有被问到,但我没有发现 我的示例表如下所示: 对于我的SQL,例如,我知道用户ID 1,我想显示我的Messanger的收件箱,因为我需要知道用户ID 1是否收到消息或是消息的发件人 例如: sender_id receiver_id 1 2 3 1 1 4 12 1 应该给我四个ID为1的收件箱结果 所以我现在一直坚持 SELECT * FROM chats AS tm WHERE tm.id
sender_id receiver_id
1 2
3 1
1 4
12 1
应该给我四个ID为1的收件箱结果
所以我现在一直坚持
SELECT * FROM chats AS tm
WHERE tm.id IN
(SELECT MAX(id) FROM chats WHERE sender_id = 1 OR receiver_id = 1 GROUP BY receiver_id)
这让我明白:
你会发现我不需要ID 2,但我喜欢ID 3,因为这是对话的最新消息
那么,我如何用SQL来决定我想要的是发送方\标识1或接收方\标识1的最新版本呢
谢谢大家! 一个选项使用最小/最大技巧:
SELECT t1.*
FROM chats t1
INNER JOIN
(
SELECT
LEAST(sender_id, receiver_id) AS sender_id,
GREATEST(sender_id, receiver_id) AS receiver_id,
MAX(updated_at) AS max_updated_at
FROM chats
GROUP BY
LEAST(sender_id, receiver_id),
GREATEST(sender_id, receiver_id)
) t2
ON LEAST(t1.sender_id, t1.receiver_id) = t2.sender_id AND
GREATEST(t1.sender_id, t1.receiver_id) = t2.receiver_id AND
t1.updated_at = t2.max_updated_at;
从聊天中选择*作为tm,其中tm.id位于从聊天中选择MAXid
其中发送方id=1或接收方id=1按接收方id分组
你可以像这样尝试Top1
从聊天中选择id
其中发送方id=1或接收方id=1,订单按id描述
限制1
这是聊天中包含id为1的发件人或收件人的最后一行
这是第一个近似值,它是次优的哇,就是这样!现在我必须检查它的实际功能,但当我在最后一行添加时,它工作得非常完美:其中t1.sender\u id=1或t1.receiver\u id=1无图片,谢谢。有关下一次,请参见: