17

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

LIMIT 5,0

这什么都不返回,所以我尝试了这个:

LIMIT 5,ALL

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

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

谢谢

4

5 回答 5

36

根据文档

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

SELECT * FROM tbl LIMIT 95, 18446744073709551615;

这是MyISAM 表可以容纳的最大行数,2^64-1。

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

于 2009-09-29T12:45:33.613 回答
3

如果您希望获得最后 x 行,最简单的方法是SORT DESCLIMIT 到x 行。当然,这SORT会减慢您的查询速度。但是,如果您反对将任意大的数字设置为第二个LIMIT参数,那么这就是这样做的方法。

于 2009-09-29T12:47:08.210 回答
0

我目前知道的唯一解决方案是照你说的做,并给出一个高得离谱的数字作为 LIMIT 的第二个参数。我不相信指定低数字或高数字在性能上没有任何差异,mysql 将在结果集末尾或达到限制时停止返回行。

于 2009-09-29T12:45:37.647 回答
0

我认为您不需要为按限制选择全部输入最大值。找到表的计数然后将其用作最大限制就足够了。

于 2016-09-27T06:15:28.983 回答
-1

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

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

通过排序查询将立即找到 id 并跳过这一行,因此下一行他将不再检查 id 是否 = 1。

于 2013-05-20T12:01:29.693 回答