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

时间:2014-06-27 05:34:42

标签: mysql sql select pagination paging

我正在使用支持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

2 个答案:

答案 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点亮灯泡!