我正在使用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
试试这个
逻辑:
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
刚刚找到解决方案。 该请求必须包含
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
来精确定位起始行。
非常感谢发条缪斯点亮灯泡!