【问题标题】:CI Codeigniter pagination without counting all results from dbCI Codeigniter 分页不计算来自 db 的所有结果
【发布时间】:2011-07-27 21:36:42
【问题描述】:

我想知道是否有人作为一个好主意或解决方案使用分页而不在拆分结果之前计算所有记录

我的意思是,在使用默认 CI 库进行分页时,我们必须设置记录总数,这对于大量记录来说太庞大了,你不觉得吗?

如果我有超过 500,000 条记录要分页怎么办?

所以我的想法是尝试使用范围分页,例如:

第 1 页 => 查询 LIMIT 0,10

第 2 页 => 查询 LIMIT 10,20

但我发现了很多问题:

1) 我无论如何都需要计算所有记录以检索页码 2)如何保存范围([1,10] [10,20] ...等)?

感谢任何可以帮助我的人

【问题讨论】:

  • 它应该自动完成。如果你想手动设置查询的数量,那么设置你的 $config[num_of_rows] = '500,000'。我的语法可能不正确,但请在分页教程中查找。
  • 我不认为分页对 500,000 条记录有什么好处。目标是使数据更易于消化,但由于记录如此之多,仍然无法找到您要查找的内容。您可能希望在返回和分页之前检索数据的子集。
  • 我同意 Chris,进行搜索并将结果分页。这将使其更加用户友好
  • 谢谢大家,我认为问题在于我可以看到 CI 在默认情况下没有限制查询,或者我弄错了?因为一旦我启用 output_profiler() 我可以看到查询并且内部没有限制......所以 CI 猜测仍在检索和计算所有结果然后通过 php 拆分它们? :/希望我弄错了
  • 我也想知道如何将总记录数保存到单个数据库记录中?所以任何时候我都不需要计算 500K 记录来检索仅在单个数据库记录中的总数.. 可能不利于数据库优化? :P

标签: php codeigniter optimization pagination


【解决方案1】:

如果您使用使用LIMIT 获取每个页面的解决方案,请使用FOUND_ROWS()

它将为您提供完全不包括限制的行数。这样您就不需要两个查询,其中第一个检索特定范围,另一个检索总行数。

【讨论】:

  • 嗨 ancide,感谢您的关注,真诚地我正在考虑如何在拆分它们之前不计算任何时候 db 总记录:P,有什么想法吗? :P
  • 我不明白你的意思。您是否尝试过使用我建议的功能?
  • 是的,我用过 man :) 这真的没关系,我想做的是不使用查询 COUNT 来检索总记录:P 因为 500K 记录中的记录将非常庞大,所以我正在尝试寻找其他一些用于检索总行数的解决方案,例如将所有时间总行数保存在单个数据库记录中......但这不应该对数据库优化有好处......你怎么看? :P
猜你喜欢
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2013-05-10
相关资源
最近更新 更多