用户和消息:如何通过发件人,收件人或两者订购?
我有两个表像这样:用户和消息:如何通过发件人,收件人或两者订购?
USER id
name
MESSAGE
id
sender_id
receiver_id
如你想,有两个这些表之间的一个一对多的关系。
在我的后端,我有过滤器来搜索与用户关联的消息。在按下“过滤器”后,我应该显示与他/她相关的消息列表,显示一列指定该人是发送者还是接收者(或甚至两者)的消息在名为“发送者/接收者”的列中。
我的疑问:我也有可能在“发送者/接收者”列的基础上订购这个列表。您知道,按“发件人/接收人”列标题将首先显示用户是“发件人”的消息,然后是“两者”,最后是“接收者”的位置。再次按下将显示用户是“Receiver”的消息,然后“Both”和“Sender”在哪里。
什么样的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
)
的看着你感兴趣的发送者和接收者,然后将用户的顺序做了一些逻辑来确定按照顺序到你的约束(先发送,然后是两者,然后是接收器)。
以上是 用户和消息:如何通过发件人,收件人或两者订购? 的全部内容, 来源链接: utcz.com/qa/260054.html