当前位置:  开发笔记 > 编程语言 > 正文

MySQL偏移无限行

如何解决《MySQL偏移无限行》经验,为你挑选了4个好方法。

我想构建一个查询,在表中显示所有结果,但从表的开头偏移5.据我所知,MySQL LIMIT需要一个限制和一个偏移量.有没有办法做到这一点?



1> Greg..:

来自LIMIT上的MySQL手册:

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

SELECT * FROM tbl LIMIT 95, 18446744073709551615;


可怕!我来到这里希望MySQL使Limit子句可选,因为它是,但也提供了偏移...但不!我已经看到这个18446744073709551615散布在整个代码中,我责怪懒惰的程序员,但它是一个设计功能!
对于那些想知道的人来说,18446744073709551615是2 ^ 64-1.您可能需要注意,因为您将无法将此值存储在32位整数中.您必须确保将其存储为字符串以确保兼容性.
使用php'PHP_INT_MAX'来避免溢出效应.
可怕!他们需要比这更优雅......"限制-1"或"限制空"看起来非常合理!或者至少限制应该接受一个子查询,例如`select*from table limit(select table(*)from table)`
糟糕的答案,但那是MySQL Doc的官方.我能说什么@ _ @
那很难看.

2> Czimi..:

正如您所提到的,LIMIT是必需的,因此您需要使用最大限制,即18446744073709551615(最大未签名BIGINT)

SELECT * FROM somewhere LIMIT 18446744073709551610 OFFSET 5


哇,这是MySQL团队的官方解决方案吗?

3> cesoid..:

正如其他答案中所述,MySQL建议使用18446744073709551615作为限制中的记录数,但请考虑一下:如果您获得18,446,744,073,709,551,615条记录,您会怎么做?事实上,如果你有1,000,000,000条记录,你会怎么做?

也许你确实需要超过10亿条记录,但我的观点是你想要的数字有一些限制,而且它不到18个数量级.为了稳定性,优化和可能的可用性,我建议对查询设置一些有意义的限制.这也可以减少任何从未见过这个神奇数字的人的混淆,并且还可以至少传达您愿意同时处理多少条记录的额外好处.

如果你真的必须从你的数据库中获得所有18个quintillion记录,也许你真正想要的是以1亿的增量获取它们并循环1840亿次.



4> jishi..:

另一种方法是选择自动增量色谱柱,然后使用HAVING过滤它.

SET @a := 0; 
select @a:=@a + 1 AS counter, table.* FROM table 
HAVING counter > 4

但我可能会坚持使用上限方法.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有