用户和消息:如何通过发件人,接收者或两者订购?

时间:2012-08-28 19:58:07

标签: sql

我有两张这样的表:

USER
id
name

MESSAGE
id
sender_id
receiver_id

正如您所想,这些表之间存在两个一对多的关系。

在我的后端,我有过滤器来搜索与用户关联的消息。在按下“过滤器”后,我应该显示与他/她相关联的消息列表,在一个名为“发件人/接收者”的列中显示一个列,该列指定该人是发件人还是接收者(或者甚至是两者)

我的疑问:我还可以在“发件人/收件人”列的基础上订购列表。您知道,按下“发件人/收件人”列标题将首先显示用户为“发件人”的邮件,然后是“两者”,最后是“收件人”。再次按下将显示用户为“Receiver”的消息,然后是“Both”,然后是“Sender”。

哪种SQL可以进行排序?

注意:我提出的架构不是强制性的。如果有必要提出另一个。

2 个答案:

答案 0 :(得分:1)

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]

答案 1 :(得分:0)

你只需要一个奇特的订单声明:

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
         )

通过查看您对发送方和接收方感兴趣的用户的顺序,然后根据您的约束做一些逻辑来确定顺序(先发送,然后发送,然后是接收方)。