如何编写具有特定 PK 起始行的 SELECT 查询?

问题描述 投票:0回答:2

我正在使用MySQL,它支持OFFSET和LIMIT,这很棒。 但是,如果我想要查询第一行等于特定主键而不是页面索引怎么办?

例如我有一张桌子:

ID NAME   HEIGHT
1  kevin  1.67
2  bob    1.82
3  jane   1.70
4  wayne  1.59

我想要一个按身高ASC排序的人员列表,第一页的最后一个ID是1,整个视图是4 1 3 2(页面大小= 2)

有些东西应该喜欢:

SELECT ID,NAME,HEIGHT FROM table OFFSET ???? LIMIT 2 ORDER BY HEIGHT ASC

所以我应该得到:

3 jane 1.70
2 bob  1.82
sql mysql select pagination
2个回答
1
投票

试试这个

逻辑:

page_size  page_number    OFFSET
   2          1         (2*1)-1 = 1
   2          2         (2*2)-1 = 3
   2          3         (2*3)-1 = 5

查询:

SELECT ID,NAME,HEIGHT 
FROM table 
ORDER BY HEIGHT ASC, ID ASC 
LIMIT 2 OFFSET (page_size * page_number)-1

0
投票

刚刚找到解决方案。 该请求必须包含

id
和排序因子(在我的例子中是
height
)。这样查询就会像这样:

SELECT * FROM table WHERE (t.height = last_height AND t.id > last_id) OR t.height > last_height ORDER BY t.height ASC, t.id ASC LIMIT 2

如果有多个人身高相同,可以使用

id
来精确定位起始行。

非常感谢发条缪斯点亮灯泡!

© www.soinside.com 2019 - 2024. All rights reserved.