gpt4 book ai didi

php - 创建一个高效的分页系统

转载 作者:行者123 更新时间:2023-12-02 05:53:30 26 4
gpt4 key购买 nike

所以我正在为类似博客的系统创建一个分页系统。我已经有了使用 limit,offset 来限制查询的整个概念。但是,我在创建实际导航时遇到了问题。

我不知道如何计算我的总页数。现在,显然我可以运行一个只选择所有行数的查询,但是,我觉得这似乎不是最有效的方法。

无论如何我都可以在我的原始查询中提取总行数吗?

 $this->DB->build(  array('select'   => 'a.*', 
'from' => array( 'ccs_custom_database_1' => 'a' ),
'order' => 'field_3 DESC',
'where' => 'field_6=",1,"',
'limit' => array($page,10),

'add_join' => array(
array(
'select' => 'm.members_display_name,m.members_seo_name',
'from' => array( 'members' => 'm' ),
'type' => 'inner',
'where' => 'a.member_id=m.member_id'


),
array(
'select' => 'c.category_name,c.category_furl_name',
'from' => array( 'ccs_database_categories' => 'c' ),
'type' => 'inner',
'where' => 'a.category_id=c.category_id'
)),

));

最佳答案

如果您的表使用 MyISAM 引擎,运行 COUNT(*) 是一个 O(1) 操作,因为它保留总行数的缓存值。

即使您没有使用它,或者查询略有不同,我怀疑执行单个 COUNT 是否会成为系统瓶颈。

如果这真的是一个大问题(我建议首先在一个包含大量虚假数据的表上进行测试),一个选择是采取稍微更务实的方法来它。在您的用例中,您的用户可能会有所不同,但是,请接受无论如何都没有人真正使用分页。最多,您可能会期望有人在放弃之前浏览 2 或 3 页。使用过滤和排序将用户想要的数据推送到第一页。

但是,即使进行了过滤和排序,您仍然可能需要显示某种 分页,因此您可以采用这种方法:给定 15 条记录的页面大小,选择前 151 条记录(每页 15 * 10 页 + 1)记录并计算您获得了多少。如果数字小于该数字,则显示“第 1 页,共 8 页”或其他内容。如果数字是 151,那么你有超过 10 页,所以显示“Page 1 of lots”。这是我在一个有大约 1200 万条记录的表上使用的方法,并且效果很好。

关于php - 创建一个高效的分页系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6262097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com