如何在MySQL中从行x开始获取所有行

时间:2009-09-29 12:41:21

标签: mysql limit offset

在MySQL中,如何从行X开始检索表中的所有行?例如,从第6行开始:

LIMIT 5,0

这没有任何回报,所以我尝试了这个:

LIMIT 5,ALL

仍然没有结果(sql错误)。

我不是在寻找分页功能,只是从特定行开始检索所有行。 LIMIT 5,2000似乎对我来说太过分了。谷歌似乎没有给我一些答案。希望你能帮忙。

由于

5 个答案:

答案 0 :(得分:31)

根据documentation

  

要从特定偏移量检索所有行直到结果集的末尾,可以使用一些大数字作为第二个参数。此语句检索从第96行到最后一行的所有行:

SELECT * FROM tbl LIMIT 95, 18446744073709551615;

这是maximum rows a MyISAM table can hold,2 ^ 64-1。

  

MyISAM表中有2 ^ 32(~4.2595 + 09)行的限制。如果使用--with-big-tables选项构建MySQL,则行限制将增加到(2 ^ 32)^ 2(1.844E + 19)行。请参见第2.16.2节“典型配置选项”。 Unix和Linux的二进制发行版使用此选项构建。

答案 1 :(得分:3)

如果您希望获得最后x行数,最简单的方法是SORT DESC和LIMIT到第一行 x行。当然,SORT会降低您的查询速度。但是如果你反对将任意大数设置为第二个LIMIT arg,那就是这样做的。

答案 2 :(得分:0)

目前我所知道的唯一解决方案是按照你的说法去做,并给出一个可笑的高数字作为LIMIT的第二个参数。我不认为在指定低数字或高数字方面有任何性能差异,mysql只会停止在结果集的末尾返回行,或者当它达到你的限制时。

答案 3 :(得分:0)

我认为你不需要为LIMIT选择全部输入最大值。只需查找表的计数,然后将其用作最大限制。

答案 4 :(得分:-1)

下一个查询也应该有效,在我看来更有效......

SELECT * FROM mytbl WHERE id != 1 ORDER BY id asc

通过订购查询会立即找到id并跳过这一个,所以下一行他不会再检查id = 1。