Php 如何计算分页的偏移量?
我正在写的一个web服务中开发分页功能,但我对数学的缺乏正在扼杀我。 我有两个键:Php 如何计算分页的偏移量?,php,pagination,Php,Pagination,我正在写的一个web服务中开发分页功能,但我对数学的缺乏正在扼杀我。 我有两个键:totalItems、currentItems、currentPage、totalPages,但也有两个指向第一个、最后一个、上一个和下一个的链接 此时,我正在进行以下计算: totalItems:表中的行数 currentItems:limit来自HTTP请求的参数 当前页面:开始参数除以限制参数 totalPages:表中的行数除以限制。(四舍五入,8.1页=9页) 我假设这些计算是正确的,我正在努力解决以
totalItems
、currentItems
、currentPage
、totalPages
,但也有两个指向第一个
、最后一个
、上一个
和下一个
的链接
此时,我正在进行以下计算:
:表中的行数totalItems
:currentItems
来自HTTP请求的参数limit
:当前页面
参数除以开始
参数限制
:表中的行数除以totalPages
。(四舍五入,8.1页=9页)限制
:first
参数为1,HTTP请求中的start
limit
:应该是最后一页的第一项,如何正确计算last
:应该是上一页的第一项,我该怎么做previous
:应该是下一页的第一项,我该怎么做next
我想问的是:我的计算正确吗?如果使用mysql its,我该如何解决
last
、previous
和next
这三个问题
LIMIT offset, items_per_page
要计算偏移量u,可以使用
$offset = ($page - 1) * $items_per_page;
然后相应地更换$页面
最后
先前的
$previous_offset = (($currentPage - 1) - 1) * $items_per_page;
下一个
编辑:
if ($previous_offset > 0) echo '<a href="?start='.$previous_offset.'&limit='.$items_per_page.'>prev</a>';
if ($next_offset <= $totalPages * $items_per_page) echo '<a href="?start='.$next_offset.'&limit='.$items_per_page.'">prev</a>';
if($previous_offset>0)回显“”;
如果($next_offset如果对于限制您指的是每页的项目数,则:
currentItems: same as limit
currentPage: floor(start / limit)
totalPages: ceil(totalItems / limit)
last: totalPages * limit
previous: (currentPage-1 // Should be greater or equal to 0) * limit
next: (currentPage+1 // Should be less or equal than totalPages) * limit
我只是一个近似值…在这里,我使用下面的代码,工作正常
<?php
//curpage = current page;
//-1 = for adjust actual page;
//30 = total post for each page;
//5 = jump or offset determided for start count post
?>
<?php $offset = (($curpage - 1) * 30) + 5 ;?>
<!-- print for view test -->
<h1><?php echo $offset ?></h1>
<?php
$args_2 = array(
'offset' => $offset,
'post_type' => 'post',
'posts_per_page' => 30,
'category_name' => $cat_filter,
'post_status' => 'publish',
'paged' => $paged
);
$query = new WP_Query( $args_2 );
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
?>
我阅读了很多文章,创建了非常简单的分页公式
offset = (limit * page no) - limit
例如,如果限制为5
LIMIT 5
page 1
offset : no (No need to use offset)
(5 - 1) - 5
select * from users limit 5
page 2
offset : 5
(5 * 2) - 5
select * from users limit 5 offset 5
page 3
offset 10
(5 * 3) - 5
select * from users limit 5 offset 10
page 4
offset 15
(5 * 4) - 5
select * from users limit 5 offset 15
从表名中选择*限制5偏移值(根据公式计算)
这对我来说是有效的如何控制分页?在查询字符串中传递偏移量或页码?HTTP中的查询字符串如下所示:api?start=x&limit=y,因此,如果项目数的偏移量是开始的,而limit是每页的项目数。然后查看答案,但使用api?page=x更容易though@DarkBee我同意是这样很简单,不幸的是,我不能在这个项目中使用它。@DarkBee这个问题与查询字符串无关。它是关于计算偏移量的。因此,如果我是正确的,我会创建一个指向最后一页的HTTP链接,如下所示:api?start=($totalPages-1)*limit&limit=limit?我的想法正确吗?如果在查询字符串中使用start和limit:)我会马上测试,不管我成功与否,我都会发布更新!当start
=1和limit
=2时,我得到了负偏移量,这听起来不对吗?你需要检查你是否确实需要显示上一个和下一个链接。如何计算start为0时的偏移量
offset = (limit * page no) - limit
LIMIT 5
page 1
offset : no (No need to use offset)
(5 - 1) - 5
select * from users limit 5
page 2
offset : 5
(5 * 2) - 5
select * from users limit 5 offset 5
page 3
offset 10
(5 * 3) - 5
select * from users limit 5 offset 10
page 4
offset 15
(5 * 4) - 5
select * from users limit 5 offset 15