【发布时间】:2009-09-29 12:41:21
【问题描述】:
在 MySQL 中,如何从第 X 行开始检索表中的所有行?例如,从第 6 行开始:
LIMIT 5,0
这没有返回任何东西,所以我尝试了这个:
LIMIT 5,ALL
仍然没有结果(sql 错误)。
我不是在寻找分页功能,只是从特定行开始检索所有行。 LIMIT 5,2000 对我来说似乎有点矫枉过正。不知何故,谷歌似乎没有给我一些答案。希望你能帮忙。
谢谢
【问题讨论】:
在 MySQL 中,如何从第 X 行开始检索表中的所有行?例如,从第 6 行开始:
LIMIT 5,0
这没有返回任何东西,所以我尝试了这个:
LIMIT 5,ALL
仍然没有结果(sql 错误)。
我不是在寻找分页功能,只是从特定行开始检索所有行。 LIMIT 5,2000 对我来说似乎有点矫枉过正。不知何故,谷歌似乎没有给我一些答案。希望你能帮忙。
谢谢
【问题讨论】:
要检索从某个偏移量到结果集末尾的所有行,您可以为第二个参数使用一些较大的数字。此语句检索从第 96 行到最后一行的所有行:
SELECT * FROM tbl LIMIT 95, 18446744073709551615;
这是maximum rows a MyISAM table can hold,2^64-1。
MyISAM 表中有 2^32 (~4.295E+09) 行的限制。如果您使用 --with-big-tables 选项构建 MySQL,则行限制将增加到 (2^32)^2 (1.844E+19) 行。请参见第 2.16.2 节,“典型配置选项”。使用此选项构建 Unix 和 Linux 的二进制发行版。
【讨论】:
如果您想获取最后 x 行,最简单的做法是 SORT DESC 和 LIMIT 到 前 x 行。当然,SORT 会减慢您的查询速度。但是如果你反对将任意大的数字设置为第二个LIMIT arg,那么就可以这样做。
【讨论】:
我目前知道的唯一解决方案是照你说的做,并给出一个高得离谱的数字作为 LIMIT 的第二个参数。我不相信指定一个小数字或一个大数字在性能上没有任何区别,mysql 将在结果集的末尾或当它达到您的限制时停止返回行。
【讨论】:
我认为您不需要输入最大值来按限制全选。找到表的计数然后将其用作最大限制就足够了。
【讨论】:
下一个查询也应该有效,而且在我看来更有效...
SELECT * FROM mytbl WHERE id != 1 ORDER BY id asc
通过排序查询将立即找到 id 并跳过这一行,因此下一行他将不再检查 id 是否 = 1。
【讨论】: