【问题标题】:calculating pagination offset of specific row/offset计算特定行/偏移量的分页偏移量
【发布时间】:2013-08-24 11:14:10
【问题描述】:

有显示帖子的功能 (请忽略语法错误)

function get_all_posts ($offset = 0 )
{
  $q =  $db->query("select * from tbl limit 10 offset $offset ");
  $template->load_view('posts' , $q ); 
}

现在假设我有一个名为 get_one_post 的函数,它有一个帖子偏移量和总帖子数作为参数

function get_one_post($requested_post_offset = 0 , $totl_posts_count = 0 )
{

}

基本上我想在这个get_one_post 中做的是计算requested_post 的页面偏移量并调用get_all_posts 函数,因此它显示包含该特定帖子的页面

function get_one_post($requested_post_offset = 0 , $totl_posts_count = 0 )
{
   $page_offset = // calculation( $requested_post_offset , $totl_posts_count );
   get_all_posts ($page_offset);

}

我可以说

 get_all_posts ($requested_post_offset );

但它将请求的帖子显示为页面中的第一个帖子......但我想在分页中的自然位置而不是第一个

我应该怎么做calculation 部分?

---------------------------------编辑------------- ---------------

请注意,我知道如何创建和实现分页...这不是这里的问题 我的框架分页系统使用偏移量而不是页码.. 就像 per_page 是 10 ,分页链接就像

page 1  => page.php?offset=0
page 2  => page.php?offset=10
page 3  => page.php?offset=20

在本例中,如果 $requested_post_offset 为 15,则 页偏移量为 10 我应该得到 ​​p> 的结果

page 2  => page.php?offset=10

【问题讨论】:

  • 嗯,在大多数分页实现中,您必须了解的第一件事是表中的记录总数。您是否有一个初始查询来确定行数?
  • @MikeBrant 我在get_one_post 函数的第二个参数中得到了这一点

标签: php mysql math


【解决方案1】:

如果每页有 m 个帖子,则帖子 k 将在页面 ceil(k/m) 上。例如,如果您每页放置 25 个帖子,则第 86 个帖子将在页面 ceil(86/25) = 4 上。

页面上帖子的偏移量为k%m,其中第一个位置为0,最后一个位置为m-1。例如,86%25 = 11,那么帖子 86 将是页面上的第 12 个。

【讨论】:

  • thanxd ,我的函数使用偏移量...我需要页面偏移量而不是页码
  • 为什么需要页面偏移量?在 SQL 中没有概念。通常页码从 1 开始。
  • 页面偏移量是指帖子在页面上的哪个位置,@max?查看更新。
  • 我的框架分页系统使用偏移量而不是页码
  • 什么是页面偏移量?从哪里偏移什么?
【解决方案2】:

以下是一些通常用于分页的通用公式:

total_pages = ceil(row_count / row_limit_per_page)
page_at_offset = ceil((zero_based_offset + 1) / row_limit_per_page))
zero_based_offset_for_a_given_page = (page_at_offset - 1) * row_limit_per_page

请注意,这里我将页码视为从 1 开始。

如果您的输入是zero_based_offset(您感兴趣的行的从零开始的偏移量)和row_limit_per_page,那么您只需使用最后两个等式。第一个等式通常用于显示目的(当您需要显示总页数以进行导航等时)。

【讨论】:

  • thanx .. 我需要给定 zero_based_offset_for_pagepost_offset ... 我添加了更多信息
  • @max 我更新了我的答案。我给出的方程式会让你到达那里,我只是没有解释你的具体情况的输入。
猜你喜欢
  • 2021-10-14
  • 2011-04-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多