排序用户消息SQL


Ordering user's messages SQL

我正在尝试通过将用户发送消息的人的对话分组来构建用户的消息收件箱。

所以我想要一个用户列表,但我希望列表中的第一个用户是发送最近消息的用户。

我的message表有以下字段:id, sender_id, receiver_id, text

下面的查询给出了我需要的列表,但没有按消息id降序排序。

SELECT sender_id AS messgr_id FROM   messages WHERE  receiver_id = '$sess_id' 
UNION
SELECT receiver_id AS messgr_id FROM messages  WHERE  sender_id = '$sess_id'

我希望有一种方法可以在SQL中排序结果,而不必使用可能较慢的php进程。

谢谢!

假设id是标识列(特别是您希望它是自动递增的),那么较大的id表示记录是最近的。在本例中,您可以按id降序排序,以便首先获得较新的消息。像这样(未经测试):

SELECT id,
       CASE WHEN receiver_id = '$sess_id' THEN sender_id
            ELSE receiver_id END AS messgr_id
FROM messages
WHERE  receiver_id = '$sess_id'
OR sender_id = '$sess_id'
ORDER BY id DESC

正如Zeus所说,为什么不能为消息设置日期时间戳呢?

没有日期时间戳的消息传递系统不是消息传递系统。

日期时间戳是自然的方式排序你的消息