SQL分页 - 查找符合条件的页面

时间:2014-09-11 15:42:39

标签: sql postgresql pagination

想象一下这张表

+---------+-------------+-----+
| id      | name        | seq |
+---------+-------------+-----+
|       1 | Name1       |   5 |
|       2 | Name2       |   4 |
|       3 | Name3       |   2 |
|       4 | Name4       |   1 |
|       5 | Name5       |   3 |
...
| 1000000 | Name1000000 | 999 |
+---------+-------------+-----+

让我们分页

SELECT id, name, seq FROM my_table ORDER BY seq LIMIT 5 OFFSET {x};

现在我想显示id = 500

页面

所以预期会是

+-----+---------+-----+
| id  | name    | seq |
+-----+---------+-----+
| 651 | Name651 | 123 |
|  97 | Name97  | 124 |
| 198 | Name198 | 125 |
| 480 | Name480 | 126 |
| 500 | Name500 | 127 | <- Matching row here
+-----+---------+-----+

是否可以显示相应的页面
通过保持分页的性能优势?


精确度:我使用PostgreSQL并实际分页查询

2 个答案:

答案 0 :(得分:0)

为什么不直接按id限制结果:

SELECT id, name FROM my_table WHERE id <= 500 ORDER BY id DESC LIMIT 5

答案 1 :(得分:0)

假设sequence没有间隙并从1开始:

select id, name, seq
from my_table
order by seq
limit 5
offset (
    select (seq - 1) / 5 * 5
    from my_table
    where id = 500
);