首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据每个聊天室的最新聊天记录对聊天室进行排序的最佳方法是什么

根据每个聊天室的最新聊天记录对聊天室进行排序的最佳方法是什么
EN

Stack Overflow用户
提问于 2019-06-05 03:48:07
回答 1查看 73关注 0票数 0

我有一个chat_hist表,结构如下:

代码语言:javascript
复制
|chat_id (auto increment)|room_id(int)|sender_id(int)|messege(text)|timestamp|

那么,根据每个chat_room(room_id)的最新chat(timestamp)列出chat_room (就像在Whatsapp组中列出一样)的最佳方式(性能方面)是什么?

我之所以这样问,是因为我不是数据库专家,我想每个房间里的聊天消息会随着每个用户刷新最新列表时性能的提高而增加

我现在使用的是:

代码语言:javascript
复制
select room_id from (
    select room_id,max(time_stamp) as ts from chat_hist where room_id in (
        select distinct room_id from chat_room
    )
    group by room_id
) as A order by ts desc

其中,表chat_room是所有room_id所在的位置。

那么最好的方法是什么呢?

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 03:58:45

您的chat_id会自动递增。因此,它可能随着时间戳的增加而增加。

因此,您可以在chat_hist中找到每个room_id的最新行,如下所示

代码语言:javascript
复制
            SELECT room_id, MAX(chat_id) chat_id
              FROM chat_hist
             GROUP BY room_id

如果您在room_id上有一个索引,这个子查询将非常快;它使用所谓的松散索引扫描。

然后,您可以使用它作为子查询来获取每个房间的最新聊天详细信息:

代码语言:javascript
复制
SELECT c.*
  FROM chat_hist c
  JOIN (
            SELECT room_id, MAX(chat_id) chat_id
              FROM chat_hist
             GROUP BY room_id

       ) latest ON c.chat_id = latest.chat_id
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56450406

复制
相关文章

相似问题

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