这是为了得到一个小组聊天列表,就像你在任何聊天应用程序上看到的那样。
该示例显示了直接消息,但从技术上讲,3+用户可以加入聊天通道。假设没有用户表。
我希望能够传递some_user和“获取some_user正在参与的所有通道,其中的通道成员不是some_user (接收者),最后一条消息被发送到频道进行预览,由最后一条消息created_at desc命令”。
channel
---
id(pk)
channel_user
---
channel_id(fk) | user_id
message
---
id(pk) | channel_id(fk) | sender_id | text | created_atchannel
---
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)发布于 2018-04-24 20:04:07
我认为以下几点应该能让你大开眼界:
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 = 1https://stackoverflow.com/questions/50009489
复制相似问题