首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从具有限制和偏移量的不同表中获取和排序行?

如何从具有限制和偏移量的不同表中获取和排序行?
EN

Stack Overflow用户
提问于 2013-05-14 15:28:35
回答 1查看 49关注 0票数 3

我正在创建web服务来返回聊天和通知列表。用户可以将每页显示的页码和项目数作为输入发送,但可以返回两种类型的对象(从最新到最新),并且必须显示在同一列表中。

我有两张桌子chatnotification

代码语言:javascript
复制
CREATE TABLE chat
(
  idchat serial NOT NULL,
  idinterest integer NOT NULL,
  idowner integer NOT NULL,
  iduser integer NOT NULL,
  creationdate,
  editdate,
  CONSTRAINT pk_chat PRIMARY KEY (idchat)
)

CREATE TABLE notification
(
  idnotification serial NOT NULL,
  message character varying(255) NOT NULL,
  creationdate date NOT NULL,
  datefinvalidite date NOT NULL,
  idcompte integer NOT NULL,
  idtypenotification integer NOT NULL,
  sender integer NOT NULL DEFAULT 0,
  CONSTRAINT pk_notification PRIMARY KEY (idnotification)
)

我想要创建一个视图,对所有的聊天和通知进行分组,由id (idchatidnotification)、日期(creationdate)和布尔ischat组成。

但我不知道这是否是正确的解决办法。

如果我必须返回20行有序消息(通知和聊天),问题可以这样做:

  • 得到10个最后的通知,然后是10个最后的聊天,但是第9次聊天可能比第11次通知要早得多。
  • 检查最新聊天的日期,如果第20次最新通知较旧,则只收到通知,否则.我不知道
  • 获取20个最新通知,20个最新聊天命令,并将hem发送到客户端,但对于同时处理多个请求的服务器来说,这可能是一项繁重的任务。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-14 16:10:13

代码语言:javascript
复制
select idchat id, creationdate, true ischat
from chat

union all

select idnotification id, creationdate, false ischat
from notification

order by creationdate desc limit 20

这个版本可能会更快:

代码语言:javascript
复制
select *
from
    (
        (
            select idchat id, creationdate, true ischat
            from chat
            order by creationdate desc
            limit 20
        ) 

        union all

        (
            select idnotification id, creationdate, false ischat
            from notification
            order by creationdate desc
            limit 20
        ) 
    ) s

order by creationdate desc limit 20
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16547200

复制
相关文章

相似问题

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