Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回页面时如何在SQL中使用seek分页?(博士后)_Sql_Postgresql_Pagination - Fatal编程技术网

返回页面时如何在SQL中使用seek分页?(博士后)

返回页面时如何在SQL中使用seek分页?(博士后),sql,postgresql,pagination,Sql,Postgresql,Pagination,我想用seek方法(通过使用索引)创建分页。 在第一页上,我希望有最新的记录(具有最高的ID),因此当我转到下一页时,ID应该越来越低 假设数据库中有100个用户。因此,获取第一页的第一个查询是: SELECT * FROM users ORDER BY id DESC LIMIT 10 要获取另一页,我需要使用索引: SELECT * FROM users WHERE id < 90 ORDER BY id DESC LIMIT 10 这会获取所需的记录,但问题是它们会被排序,反之亦

我想用seek方法(通过使用索引)创建分页。 在第一页上,我希望有最新的记录(具有最高的ID),因此当我转到下一页时,ID应该越来越低

假设数据库中有100个用户。因此,获取第一页的第一个查询是:

SELECT * FROM users ORDER BY id DESC LIMIT 10
要获取另一页,我需要使用索引:

SELECT * FROM users WHERE id < 90 ORDER BY id DESC LIMIT 10
这会获取所需的记录,但问题是它们会被排序,反之亦然

我得到的是:

90 | tom@gmail.com
91 | patrick@gmail.com
92 | jimmy@gmail.com
...
我想要的是:

100 | hannah@gmail.com
99 | dog@gmail.com
98 | hello@gmail.com
...
我的问题是:

  • 这个分页方法的实现正确吗?也许我做错了什么
  • 如果我的方法是正确的,我应该如何以正确的顺序获取记录?是否可以在SQL中执行此操作,或者唯一的方法是在服务器上对结果进行排序

  • 获取当前顺序为子查询的行,然后在外部查询:

    select * 
      from (select * 
              from users 
             where id > 89 
             order by id asc 
             limit 10
           ) 
    order by id desc;
    

    您可以将目标id增加10,而不是切换顺序和比较运算符?如果ID中有间隙(如果数据集不大),则可能需要使用“限制/偏移”。@clamp我的数据集很大,这就是我不使用“偏移/限制”的原因。可能会有差距,所以我不能把数字增加10
    select * 
      from (select * 
              from users 
             where id > 89 
             order by id asc 
             limit 10
           ) 
    order by id desc;