检索与最新mesaage、node js、socket io、mysql聊天应用程序的对话

a8jjtwal  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(396)

我是比较新的建设聊天应用程序。ionic、node js、socket io、mysql堆栈用于构建一对一和群聊的聊天应用程序。相应db模式中的表如下所示




在本设计中,会话及其id被视为线程。
当发送者在组中插入新邮件时:“messenger\u threads”表将填充新的线程id(如果是组邮件,则填充组id)和主题(如果该组id条目是新的),否则不插入任何内容。当发送者在私人聊天中插入一条新消息时:线程id由客户端相应的发送者-接收者对生成。“messenger\u threads”表用生成的线程id填充。如果表中包含与同一发送方-接收方对的对话,则不会进行插入。
同样,在“messenger\u参与者”表中填充具有相同线程id(保护id)的群聊和私人聊天的参与者
在“messenger\u messages”表中,新消息插入了线程id、消息正文和发件人id(即表中的用户id),因此在特定会话/线程(群聊或私人聊天)中,所有消息和发件人详细信息都可用。
在“user\u messages”表中,消息id和相关用户的详细信息(发送者和接收者)都会更新,这样就可以更新每个用户的消息清除操作。
从“users”表检索用户id详细信息
用户属性1.id 2.username 3.其他\u详细信息。。
你能不能帮我检索一个用户的所有对话的最新信息,如facebook信使。也给我在数据库设计的建议。

krugob8w

krugob8w1#

select mthread.subject subject,message.last_message 
from messenger_threads mthread,
    (select mm.thread_id thread_id,mm.body last_message,max(mm.updated_at) max_date 
            from messenger_messages mm 
                group by mm.thread_id) message
where mthread.id in 
    (select thread_id from messenger_participants mpart where user_id in(?)) 
    and message.thread_id=mthread.id 
order by mthread.updated_at desc;

如果可以对该查询应用性能调整以进一步改进它,则该查询应该可以满足您的需要。欢迎提出改进此查询的建议。

相关问题