【问题标题】:Adding PHP Pagination添加 PHP 分页
【发布时间】:2011-07-09 01:32:36
【问题描述】:

我有一个 SQL 查询,它输出一堆符合特定条件的行。我正在尝试在此过程中添加分页,以便更易于使用。

我的流程是这样的:

  • 算出这个页面的下限,算出这个页面的上限(例如1 - 20, 21 - 40等)
  • 从 MySQL 表中提取这些行
  • 列出这些行
  • 如果超过20个,添加floor($totalRows / 20)
  • ???
  • 分页

我的分页似乎工作不正常,但最后一页(无论它可能是什么)列出的行数比它应该的行数少一页。这是我的代码:

    $page = $_GET["p"];
    $bL = (($page - 1) * 20) + 1;
    $tL = $page * 20;

    $total = mysql_num_rows(mysql_query("SELECT id FROM coupons WHERE zone = '$zone' AND dateExp > CURDATE()"));

    if($tL > $total)
    {
        $tL = (($page - 1) * 20) + ($total % 20);
    }

    $gotRows = "SELECT * FROM coupons WHERE zone = '$zone' AND dateExp > CURDATE() ORDER BY retailerName LIMIT " . $bL . ", " . $tL;

   //list all those rows

    $numPages = floor($total / 20) + 1;
    echo "<p id='results'>" . $total . " result" . $plural . " &#183; Displaying " . $bL . " to " . $tL . " </p>";
    echo "</table>";
    $pG = 1;
    while($pG <= $numPages)
    {
        if($pG == $page)
        {
            echo $pG;
        }
        else
        {
            echo "<a href='zone?z=" . $zone . "&p=" . $pG . "'>" . $pG . "</a>";
        }
        if($pG != $numPages)
        {
            echo "&#183";
        }
        $pG = $pG + 1;
    }

有什么帮助吗?

编辑: 没关系,我解决了行问题。但是我底部页面链接错误的问题仍然存在。在第 1 页上,它可以正常工作 - “1”不是链接,“2”是。但是,在第 2 页上,只有“1”作为链接显示。 “2”不显示。

【问题讨论】:

  • 关于 SO 处理 PHP/MySQL 分页有很多问题。你已经看过这些了吗?
  • 分页现在工作正常 - 我只是想修复我的页面链接错误。

标签: php mysql sql pagination


【解决方案1】:

这个逻辑让我很困惑。如果$tl大于总数,不就等于总数了吗?

if($tL > $total)
{
    $tL = (($page - 1) * 20) + ($total % 20);
}

为什么不呢:

$tL = ($tL > $total) ? $total : $tl;

另外,我会使用 SQL 来查找您的总数,而不是 mysql_num_rows。它应该证明更可靠(尤其是当您停止使用真正旧的 mysql 扩展时)。也许它也会返回正确的总数。

SELECT COUNT(id) FROM coupons WHERE zone = '$zone' AND dateExp > CURDATE()

除此之外,我没有看到任何可以解释错误行数的明显内容。

【讨论】:

  • 我改变了那些。提交此问题后不久,我的行运行良好。现在我唯一的问题是生成页面链接的循环工作不正常。
猜你喜欢
  • 1970-01-01
  • 2015-12-20
  • 2017-09-03
  • 2011-10-31
  • 2015-10-30
  • 2014-12-14
  • 2017-12-13
  • 2018-02-13
  • 1970-01-01
相关资源
最近更新 更多