我有这个查询来获取两个用户之间的最后一条消息。
SELECT f.*
FROM
(
SELECT *
FROM messages a
WHERE (LEAST(a.sender, a.receiver), GREATEST(a.sender, a.receiver), a.timestamp)
IN (
SELECT LEAST(b.sender, b.receiver) AS x,
GREATEST(b.sender, b.receiver) AS y,
MAX(b.timestamp) AS msg_time
FROM messages b
GROUP BY x, y
)
) f
WHERE :user_id IN (f.sender, f.receiver)
ORDER BY f.timestamp DESC
我在这里得到了它,对我来说有点复杂。
只有在:user_id
没有删除对话的情况下,我才需要修改它以获取最后一条消息。
该表有 4 个重要字段:sender, receiver, sender_deleted, receiver_deleted
.
当用户想要删除对话时,我运行查询将删除的字段设置为 1。
用户 4 已删除对话的表示例:
sender receiver sender_deleted receiver_deleted message
4 17 1 0 user 4 to 17 message
17 4 0 1 user 17 to 4 message
我需要修改上面的查询,所以如果:user_id = 4
它返回空,但如果:user_id = 17
返回最后发送的消息。
我希望我能很好地解释我想要做什么。