如何计算分页的偏移量?

时间:2015-01-16 20:39:18

标签: php pagination

我正在编写一个我正在编写的Web服务中的分页功能,但是我缺乏数学洞察力现在正在扼杀我。 我有几个键:totalItemscurrentItemscurrentPagetotalPages,还有一些指向firstlast的链接, previousnext

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

  • totalItems:表格中的行数
  • 来自HTTP请求的
  • currentItemslimit参数
  • currentPagestart参数除以limit参数
  • totalPages:表格中的行数除以limit。 (圆了,8.1页= 9页)

我认为这些计算是正确的,我正在努力解决的问题如下:

  • firststart参数为1,其中limit来自HTTP请求
  • last:应该是最后一页的第一项,如何正确计算?
  • previous:应该是上一页的第一项,我该怎么做?
  • next:应该是下一页的第一项,我该怎么做?

我想问的是:我的计算是否正确?我如何解决lastpreviousnext的三个问题?

4 个答案:

答案 0 :(得分:16)

如果您使用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>';

答案 1 :(得分:2)

如果限制指的是每页的项目数,则:

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

我只是一个近似......

答案 2 :(得分:0)

在这里,我使用下面的代码并且工作正常。

var list = [[0, 0], [0, 1]]
list.includes([0, 0])

答案 3 :(得分:0)

我浏览了许多文章,并创建了非常简单的分页公式

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的偏移值中选择*(根据公式计算)

这对我有用