添加PHP分页

时间:2011-03-04 19:13:17

标签: php mysql sql pagination

我有一个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”没有显示。

1 个答案:

答案 0 :(得分: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()

除此之外,我没有看到任何可以解释行数不正确的明显事实。