想象一下这张表
+---------+-------------+-----+
| 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并实际分页查询
答案 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
);