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针对发送方和接收方查看您感兴趣的用户,然后根据您的约束先发送,然后发送两者,再发送接收方,执行一些逻辑来确定顺序