为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL数据-实现分页的最佳方法?

MySQL数据-实现分页的最佳方法?

桃花长相依 2019-07-05 12:31:02
MySQL数据-实现分页的最佳方法?我的iPhone应用程序连接到我的PHPWeb服务,从MySQL数据库中检索数据。一个请求可以返回500个结果。实现分页和一次检索20个项的最佳方法是什么?假设我从我的数据库收到了前20个广告。现在我怎样才能要求接下来的20个广告呢?
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

来自MySQL文档:

限制子句可用于限制SELECT语句返回的行数。极限使用一个或两个数值参数,这两个参数都必须是非负整数常量(除非使用准备好的语句)。

使用两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。第一行的偏移量为0(而不是1):

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

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

SELECT * FROM tbl LIMIT 95,18446744073709551615;

使用一个参数,该值指定从结果集开始返回的行数:

SELECT * FROM tbl LIMIT 5;     # Retrieve first 5 rows

换句话说,限制行_计数等于极限0,行_计数。


查看完整回答
反对 回复 2019-07-05
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

对于500条记录,效率可能不是问题,但是如果您有数百万条记录,那么使用WHERE子句来选择下一页可能是有利的:

SELECT *FROM yourtableWHERE id > 234374ORDER BY id
LIMIT 20

这里的“234374”是您查看的Preous页面上最后一条记录的ID。

这将使id上的索引可用于查找第一条记录。如果你用LIMIT offset, 20你可能会发现,当你在最后一页的时候,它会变得越来越慢。正如我所说的,如果您只有200条记录,这可能并不重要,但它可以与更大的结果集有所不同。

这种方法的另一个优点是,如果调用之间的数据发生了变化,则不会丢失记录或得到重复的记录。这是因为添加或删除行意味着所有行的偏移量在更改后都会更改。在你的例子中,这可能并不重要-我想你的广告库不会经常变化,而且无论如何也不会-如果它们连续两次得到相同的广告,人们会注意到-但是如果你在寻找“最佳方式”,那么在选择使用哪种方法时,这是另一件需要记住的事情。

如果您确实希望在偏移量中使用限制(如果用户直接导航到页10000而不是一个接一个地分页,这是必要的),那么您可以阅读本文迟行查找通过较大的偏移量来提高极限的性能。


查看完整回答
反对 回复 2019-07-05
?
慕仙森

TA贡献1827条经验 获得超7个赞

定义偏移量用于查询。例如

第1页-(记录01-10):偏移量=0,极限=10;

第2页-(记录11-20)偏移量=10,极限=10;

并使用以下查询:

SELECT column FROM table LIMIT {someLimit} OFFSET {someOffset};

例如第2页:

SELECT column FROM tableLIMIT 10 OFFSET 10;


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 540 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信