如何计算分页的偏移量?
How do I calculate the offsets for pagination?
我正在编写我正在编写的 Web 服务中的分页功能,但我缺乏数学洞察力现在正在折磨我。
我有几个键:totalItems
、currentItems
、currentPage
、totalPages
,还有几个指向 first
、last
的链接previous
和 next
.
此刻,我正在做以下计算:
totalItems
:table 中的行数
currentItems
: limit
来自 HTTP 请求的参数
currentPage
:start
参数除以limit
参数
totalPages
:table 中的行数除以 limit
。 (四舍五入,8.1 页 = 9 页)
我假设这些计算是正确的,我 正在努力解决的问题如下:
first
: start
参数为 1,来自 HTTP 请求limit
last
: 应该是最后一页的第一项,如何正确计算?
previous
: 应该是上一页的第一项,怎么办?
next
: 应该是下一页的第一项,我该怎么做?
我想问的是:我的计算是否正确?我该如何解决 last
、previous
和 next
的三个问题?
如果你和 mysql 一起工作,它
LIMIT offset, items_per_page
要计算偏移量,您可以使用
$offset = ($page - 1) * $items_per_page;
然后相应地替换 $page
。
最后
$last_offset = ($totalPages - 1) * $items_per_page;
上一个
$previous_offset = (($currentPage - 1) - 1) * $items_per_page;
下一个
$next_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>';
如果 limit 您指的是每页的项目数,则:
currentItems: same as limit
currentPage: floor(start / limit)
totalPages: ceil(totalItems / limit)
last: totalPages * limit
previous: (currentPage-1) * limit // Should be greater or equal to 0
next: (currentPage+1) * limit // Should be less or equal than totalPages
这只是一个近似值...
这里我使用了下面的代码并且工作正常。
<?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
select * from table name limit 5 偏移值(由公式计算)
这对我有用
我正在编写我正在编写的 Web 服务中的分页功能,但我缺乏数学洞察力现在正在折磨我。
我有几个键:totalItems
、currentItems
、currentPage
、totalPages
,还有几个指向 first
、last
的链接previous
和 next
.
此刻,我正在做以下计算:
totalItems
:table 中的行数
currentItems
:limit
来自 HTTP 请求的参数currentPage
:start
参数除以limit
参数totalPages
:table 中的行数除以limit
。 (四舍五入,8.1 页 = 9 页)
我假设这些计算是正确的,我 正在努力解决的问题如下:
first
:start
参数为 1,来自 HTTP 请求limit
last
: 应该是最后一页的第一项,如何正确计算?previous
: 应该是上一页的第一项,怎么办?next
: 应该是下一页的第一项,我该怎么做?
我想问的是:我的计算是否正确?我该如何解决 last
、previous
和 next
的三个问题?
如果你和 mysql 一起工作,它
LIMIT offset, items_per_page
要计算偏移量,您可以使用
$offset = ($page - 1) * $items_per_page;
然后相应地替换 $page
。
最后
$last_offset = ($totalPages - 1) * $items_per_page;
上一个
$previous_offset = (($currentPage - 1) - 1) * $items_per_page;
下一个
$next_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>';
如果 limit 您指的是每页的项目数,则:
currentItems: same as limit
currentPage: floor(start / limit)
totalPages: ceil(totalItems / limit)
last: totalPages * limit
previous: (currentPage-1) * limit // Should be greater or equal to 0
next: (currentPage+1) * limit // Should be less or equal than totalPages
这只是一个近似值...
这里我使用了下面的代码并且工作正常。
<?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
select * from table name limit 5 偏移值(由公式计算)
这对我有用