在有序的Mysql查询中获取第i行到第j行

时间:2011-09-11 18:23:30

标签: php mysql sql select

所以假设我有这个问题:

SELECT * FROM t WHERE j = k ORDER BY l

有没有办法让查询只返回,例如根据ORDER BY语句返回第20到第40条记录,而不是返回ORDER BY语句排序的所有行?

6 个答案:

答案 0 :(得分:2)

SELECT * FROM t WHERE j = k ORDER BY l LIMIT 20, 20

限制20(第二个),从偏移量20开始,第一个。

答案 1 :(得分:1)

SELECT * FROM t WHERE j = k ORDER BY l LIMIT 20 OFFSET 20;

limit表示你只需要20行,而offset表示你不需要前20行。

请记住,当偏移值非常大时,您的查询将非常慢,因为sql server需要扫描第一行<offset>行以返回<offset>+<limit>行。< / p>

答案 2 :(得分:1)

您是否在the documentation进行了搜索?

  

LIMIT子句可用于约束返回的行数   通过SELECT声明。 LIMIT需要一个或两个数字参数,   必须都是非负整数常量(使用时除外)   准备好的陈述)。

     

使用两个参数,第一个参数指定的偏移量   第一行返回,第二行指定最大数量   要返回的行。初始行的偏移量为0(不是1)。

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15
     

为了与PostgreSQL兼容,MySQL还支持LIMIT row_count OFFSET offset 语法。

答案 3 :(得分:1)

LIMIT + OFFSET

SELECT * FROM t WHERE j = k ORDER BY l LIMIT 19,21

注意:

  • 偏移量为零,因此19 =从第20行开始
  • 并且在20到40之间有21行(

答案 4 :(得分:0)

http://dev.mysql.com/doc/refman/5.0/en/select.html

sample: SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

所以

SELECT * FROM t WHERE j = k ORDER BY l LIMIT 20,20; #retrieve rows 20-40

答案 5 :(得分:0)

有解决方案: SELECT * FROM t WHERE j = k ORDER BY l limit 21,20; (21是行数,20是起始行,因此如果它们存在,您将检索从20到40的行)