我正在使用支持OFFSET和LIMIT的MySQL,这很棒。 但是如果我想要查询第一行等于特定主键而不是页面索引呢?
e.g。我有一张桌子:
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
答案 0 :(得分: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
答案 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
可用于精确定位起始行。
非常感谢Clockwork-Muse点亮灯泡!