Sequelize 聊天列表group查询
做了聊天室的功能
表是这样设计的
id: { type: UUID, primaryKey: true, defaultValue: UUIDV1 },
fromUserId: { type: UUID, allowNull: false },
toUserId: { type: UUID, allowNull: false },
message: { type: STRING, allowNull: false },
isReaded: { type: BOOLEAN, allowNull: false, defaultValue: false },
createdAt: DATE,
updatedAt: DATE,
deletedAt: DATE
然后我要查当前用户的所有聊天者,就是微信的聊天列表
我是这样写的
const datas = await ctx.model.Chat.findAndCountAll({
where:{
[ctx.model.Sequelize.Op.or]:[
{ toUserId: ctx.user.id},
{ fromUserId: ctx.user.id}
]
},
group: ['toUserId', 'fromUserId'],
})
然后有会发现,跟一个用户会有两个聊天框,一个是他发我最后一条信息,和我发给他的最后一条信息:
我要怎么合并这两个呢?根据最后的发表时间
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Sequelize语法不清楚,但可以分享下需求对应的SQL,看是否对你有帮助。(注:sql中的
@uid
替换为要查询哪个用户的聊天列表的user id)1.第一种,比较简单
但如果聊天表chat数据量越来越大,可能会执行比较久。
主要聚合的是uid,并且要取到对方的uid,所以使用了if(发送方是自己,选择接收方id,否则选择发送方id);最后max查出最后一条的id(正常就是最后发送的时间)。
有了用户的uid和聊天表的id,那剩下的就是去关联用户表和聊天表,取出对应用户信息和聊天信息了。
2.第二种,速度比较快,有点复杂