我有两张这样的表:
USER
id
name
MESSAGE
id
sender_id
receiver_id
正如您所想,这些表之间存在两个一对多的关系。
在我的后端,我有过滤器来搜索与用户关联的消息。在按下“过滤器”后,我应该显示与他/她相关联的消息列表,在一个名为“发件人/接收者”的列中显示一个列,该列指定该人是发件人还是接收者(或者甚至是两者)
我的疑问:我还可以在“发件人/收件人”列的基础上订购列表。您知道,按下“发件人/收件人”列标题将首先显示用户为“发件人”的邮件,然后是“两者”,最后是“收件人”。再次按下将显示用户为“Receiver”的消息,然后是“Both”,然后是“Sender”。
哪种SQL可以进行排序?
注意:我提出的架构不是强制性的。如果有必要提出另一个。
答案 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
)
通过查看您对发送方和接收方感兴趣的用户的顺序,然后根据您的约束做一些逻辑来确定顺序(先发送,然后发送,然后是接收方)。