这是为了获取群聊列表,就像您在任何聊天应用程序上看到的一样。
该示例显示直接消息,但从技术上讲,3 个以上的用户可以加入聊天 channel 。假设没有用户表。
我希望能够传入 some_user 并“获取 some_user 参与的所有 channel , channel 成员不是 some_user(收件人),以及发送到 channel 进行预览的最后一条消息,按最后一条消息排序created_at desc”。
channel
---
id(pk)
channel_user
---
channel_id(fk) | user_id
message
---
id(pk) | channel_id(fk) | sender_id | text | created_at
channel
---
1
2
channel_user
---
1 | "Elon"
1 | "Mark"
2 | "Steve"
2 | "Elon"
message
---
3 | 1 | "Elon" | "AI will destroy us all" | timestamp(late)
4 | 1 | "Mark" | "No it won't" | timestamp(later)
5 | 2 | "Steve"| "Sup Elon" | timestamp(latest)
传入用户“Elon”并得到如下内容:
channel_id | recipient(s) | last_message | last_message_sender | last_message_created_at
---
2 | "Steve" or ["Steve",...] | "Sup Elon" | "Steve" | timestamp(latest)
1 | "Mark" or ["Mark",...] | "No it won't" | "Mark" | timestamp(later)
最佳答案
我认为像下面这样的东西应该让你进入球场:
SELECT *
FROM
(
SELECT m.channel_id, m.sender_id, m.text, m.created_at, row_number() over (PARTITION BY m.channel_id ORDER BY created_at desc) as message_rank
FROM
channel_user cu
INNER JOIN message m ON
cu.channel_id = m.channel_id
WHERE
cu.user_id = 'Elon'
AND m.user_id <> 'Elon'
) sub
WHERE sub.message_rank = 1
关于sql - 给定一个用户 ID,获取他们所有的收件人 channel 和最后一条消息预览?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50009489/