计算特定行/偏移的分页偏移量

时间:2013-08-21 21:51:06

标签: php mysql math

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

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部分?

--------------------------------- EDIT ------------- ---------------

请注意我知道如何创建和实施分页......这不是问题所在 我的框架分页系统使用偏移而不是页码。 就像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  我应该得到

的结果
page 2  => page.php?offset=10

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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,那么您只需要使用最后两个方程式。第一个等式通常用于显示目的(当您需要显示导航等的总页数时)。