Sql 用户和消息:如何按发件人、收件人或两者进行订购?
我有两张这样的桌子:Sql 用户和消息:如何按发件人、收件人或两者进行订购?,sql,Sql,我有两张这样的桌子: USER id name MESSAGE id sender_id receiver_id 如您所想,这些表之间存在两个一对多关系 在我的后端,我有过滤器来搜索与用户关联的消息。按Filter之后,我应该显示与他/她相关的消息列表,在名为sender/receiver的列中显示一列,指定此人是发送者还是接收者,甚至是两者 我的疑问是:我还必须给出在发送者/接收者栏底部排序列表的可能性。您知道,按Sender/Receiver列标题将首先显示用户是发件人的消息,然后显示两
USER
id
name
MESSAGE
id
sender_id
receiver_id
如您所想,这些表之间存在两个一对多关系
在我的后端,我有过滤器来搜索与用户关联的消息。按Filter之后,我应该显示与他/她相关的消息列表,在名为sender/receiver的列中显示一列,指定此人是发送者还是接收者,甚至是两者
我的疑问是:我还必须给出在发送者/接收者栏底部排序列表的可能性。您知道,按Sender/Receiver列标题将首先显示用户是发件人的消息,然后显示两者的位置,最后显示接收方的位置。再次按下将显示信息,其中用户是接收者,然后是两者,然后是发送者
什么样的SQL可以进行这种排序
注意:我建议的模式不是强制性的。如果有必要,建议另一个。您只需要一个奇特的订单:
ORDER
BY CASE WHEN sender_id = [user-ID of interest]
AND receiver_id = [user-ID of interest]
THEN 2 -- is both sender & receiver
WHEN sender_id = [user-ID of interest]
THEN 1 -- is only sender
ELSE 3 -- is only receiver
END,
[other conditions to sort by]
select m.*
from message m join
user s
on u.sender_id = s.id join
user r
on u.receive_id = r.id
where s.id = <user> or r.id = <user>
order by (case when s.id = <user> and r.id <> <user> then 0
when s.id = <user> and r.id = <user> then 1
when r.id = <user> then 2
else 3 -- shouldn't happen
)
order by针对发送方和接收方查看您感兴趣的用户,然后根据您的约束先发送,然后发送两者,再发送接收方,执行一些逻辑来确定顺序