我有一个SQL查询,输出一堆符合特定条件的行。我正在尝试为此过程添加分页,以便更容易使用。
我的流程是这样的:
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 . " · 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 "·";
}
$pG = $pG + 1;
}
任何帮助?
编辑:没关系,我解决了行问题。但我的底部页面链接错误的问题仍然存在。在第1页,它正常工作 - “1”不是链接,“2”是。但是,在第2页上,只显示“1”作为链接。 “2”没有显示。
答案 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()
除此之外,我没有看到任何可以解释行数不正确的明显事实。