【问题标题】:How to get ALL rows starting from row x in MySQL如何从 MySQL 中的第 x 行获取所有行
【发布时间】:2009-09-29 12:41:21
【问题描述】:

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

LIMIT 5,0

这没有返回任何东西,所以我尝试了这个:

LIMIT 5,ALL

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

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

谢谢

【问题讨论】:

    标签: mysql limit offset


    【解决方案1】:

    根据documentation

    要检索从某个偏移量到结果集末尾的所有行,您可以为第二个参数使用一些较大的数字。此语句检索从第 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 的二进制发行版。

    【讨论】:

    • 谢谢格雷格,你的回答再完整不过了:)
    • 很好的答案,我已经调整了手动链接,使其进入页面中的正确位置并删除了我大部分重复的答案:)
    【解决方案2】:

    如果您想获取最后 x 行,最简单的做法是 SORT DESC 和 LIMIT 到 x 行。当然,SORT 会减慢您的查询速度。但是如果你反对将任意大的数字设置为第二个LIMIT arg,那么就可以这样做。

    【讨论】:

    • 可能是因为这不是 SolidSmile 所要求的。他不知道最后 x 行数。他知道前 x 行。所以这个答案解决了不同的问题。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-15
          • 2020-02-18
          相关资源
          最近更新 更多