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

我有两个表像这样:用户和消息:如何通过发件人,收件人或两者订购?

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

回到顶部