【问题标题】:PHP MySQLi Pagination LIMIT issuePHP MySQLi分页限制问题
【发布时间】:2015-03-13 19:14:05
【问题描述】:

我目前正在编写一个分页脚本,用于显示每页最多 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,P2 有 21。P3 是空的。

我已尝试更改页面等的计算,但仍然无法正常工作。谁能给我一些关于这个问题的见解?

提前致谢。

【问题讨论】:

    标签: php mysql mysqli pagination


    【解决方案1】:

    从 21 到 40,而不是 20。

    LIMIT 子句包括在内。它来自记录 20,计数 20。

    限制 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>
    

    【讨论】:

    • 感谢您的回复。那么如何将限制设置为 0,20? 20,20 | 40,20 等?
    • 使用 PHP $var 作为计数器,对于显示 20 行的每个输出循环,$var = $var + 20;从 0 开始。然后调用下一个分页。
    • 您更新的答案很有意义。我现在有一个功能齐全的分页脚本。谢谢
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 2010-09-23
      相关资源
      最近更新 更多