PHP MySQLi分页限制问题

时间:2015-01-15 11:43:26

标签: php mysql mysqli pagination

我目前正在制作一个分页脚本,用于显示每页20个上限的记录。

我在Stack Overflow上发现了一个类似的问题,它有一个如何执行此操作的示例。我已经尝试过代码并进行了调整,但我无法使其正常运行。

代码是:

$pages = ceil($rescnt['cnt']/$limit);

    $page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
    'options' => array(
        'default'   => 1,
        'min_range' => 1,
    ),
    )));
    $offset = ($page - 1)  * $limit;
    $start = $offset;
    $end = min(($offset + $limit), $rescnt['cnt']);

MySQL数据库中有41条记录(0 - 40)。

第一页正确显示,LIMIT 0,20。但是,第二页的限制为LIMIT 20,40,实际上会返回21个结果。

脚本计算总共应该有3页(P1上20个,P2上20个,P3上1个)但是,P1有20个& 1。 P2有21.P3是空的。

我已经尝试更改页面等的计算,但它仍然无法正常工作。有谁能请我对这个问题有所了解?

提前致谢。

2 个答案:

答案 0 :(得分:2)

从21到40,而不是20.

LIMIT条款包含在内。它来自记录20,计数20。

LIMIT 20,20 = 20,21,22,... 37,38,39。

编辑:

您将看到LIMIT 0,20显示20行,但它们从零开始。与数组键相反,这通过迭代延续。

更好:

您正在更新错误的列。

前20个结果= LIMIT 0,20

接下来的20个结果= LIMIT 19,20
最终的20个结果= LIMIT 39,20

LIMIT <start row>, <row count>

答案 1 :(得分:1)

20到40是21条记录。你有一个错误。你应该从下一页开始,上一页最后一项记录再加上1.即21,40

像1到2,即1,2是两个记录。