我需要在用户之间开发一个私人消息系统,这就是我想要做的:
我有一张如下表:
id | from_user_id | to_user_id | message
1  | 1            | 2          | Hey n°1 !    <-- Me with user n°2
2  | 2            | 1          | Hey n°2 !    <-- Me with user n°2
4  | 1            | 3          | Hey n°3 !    <-- Me with user n°3
3  | 3            | 2          | Hey n°4 !
我们假设我是用户 n°1,我想获取我最后一条消息的列表“按用户分组”并按 id 排序,作为讨论:
id | with_user_id | message
4  | 3            | Hey n°3 !
2  | 2            | Hey n°2 !
我尝试过这样的请求:
SELECT id, message,
       (CASE WHEN from_user_id = 1 THEN to_user_id ELSE from_user_id END) AS with_user_id
FROM privates
WHERE from_user_id = 1 OR to_user_id = 1
GROUP BY with_user_id
ORDER BY id DESC
但我得到了这个:
id | with_user_id | message
4  | 3            | Hey n°3 !
1  | 2            | Hey n°1 !
所以问题是它选择了用户 n°1 的第一条消息,而不是最后一条。