首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定一个用户id,获取他们所有的接收者的通道和最后一条消息预览?

给定一个用户id,获取他们所有的接收者的通道和最后一条消息预览?
EN

Stack Overflow用户
提问于 2018-04-24 19:28:54
回答 1查看 99关注 0票数 0

这是为了得到一个小组聊天列表,就像你在任何聊天应用程序上看到的那样。

该示例显示了直接消息,但从技术上讲,3+用户可以加入聊天通道。假设没有用户表。

我希望能够传递some_user和“获取some_user正在参与的所有通道,其中的通道成员不是some_user (接收者),最后一条消息被发送到频道进行预览,由最后一条消息created_at desc命令”。

代码语言:javascript
复制
channel
---
id(pk)

channel_user
---
channel_id(fk) | user_id

message
---
id(pk) | channel_id(fk) | sender_id | text | created_at
代码语言:javascript
复制
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“并得到如下内容:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-24 20:04:07

我认为以下几点应该能让你大开眼界:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50009489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档