Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何计算分页的偏移量?_Php_Pagination - Fatal编程技术网

Php 如何计算分页的偏移量?

Php 如何计算分页的偏移量?,php,pagination,Php,Pagination,我正在写的一个web服务中开发分页功能,但我对数学的缺乏正在扼杀我。 我有两个键:totalItems、currentItems、currentPage、totalPages,但也有两个指向第一个、最后一个、上一个和下一个的链接 此时,我正在进行以下计算: totalItems:表中的行数 currentItems:limit来自HTTP请求的参数 当前页面:开始参数除以限制参数 totalPages:表中的行数除以限制。(四舍五入,8.1页=9页) 我假设这些计算是正确的,我正在努力解决以

我正在写的一个web服务中开发分页功能,但我对数学的缺乏正在扼杀我。 我有两个键:
totalItems
currentItems
currentPage
totalPages
,但也有两个指向
第一个
最后一个
上一个
下一个
的链接

此时,我正在进行以下计算:

  • totalItems
    :表中的行数
  • currentItems
    limit
    来自HTTP请求的参数
  • 当前页面
    开始
    参数除以
    限制
    参数
  • totalPages
    :表中的行数除以
    限制
    。(四舍五入,8.1页=9页)
我假设这些计算是正确的,我正在努力解决以下问题:

  • first
    start
    参数为1,HTTP请求中的
    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