用PHP简单分页

时间:2010-01-28 05:55:52

标签: php

我想在PHP中实现分页。我有一些来自db的结果集,让它成为一个数组。 我需要一个页面,每页应显示4条记录,页码应该是以下

“<<< 1,2,3 ..... 20>>”

当您选择第2页时,格式应为以下内容

“<<<< 3,4,5 ..... 20>>”

你们可以建议我实现一些分页概念吗?

5 个答案:

答案 0 :(得分:3)

实际上,您可以在SQL中使用LIMIT子句。

Here是一个很好的教程,可以帮助你入门。

答案 1 :(得分:1)

查看PEAR::Pager

答案 2 :(得分:1)

获得结果非常简单,根据页码使用上述限制。您可以使用循环打印页码。

首先,假设页码在查询字符串中以page = 2的形式发送。

$pagenum=(int)$_GET['page'];
if($pagenum<1){ $pagenum=1; }//perform a sanity check. You might also query to find the max page number and see that it's not higher than that.

然后将pagenum作为偏移量插入到SQL查询中,然后将其乘以每页结果数减去每页结果数。

几乎在每种情况下都应该使用预准备语句将所提供的参数放入SQL当然,但是在这种情况下,它并不是绝对必要的,因为你确定变量是因铸造而变成的int ((int)部分)。只是要强调一点。

假设每页有4个项目。您可以使用LIMIT的两个参数,也可以分别使用LIMIT和OFFSET。如果仅使用限制,则第一个数字是偏移量,第二个数字是结果数量。

$offset=$pagenum*4-4;//this means for page 1, start on 0, page 2 starts on 4, etc.
$sql="select * from the_table limit $offset,4";

因此,这就是您获取给定页码的数据的方式。然后,打印出页码是另一回事。此示例基于您希望页面如上所述的外观。

for($i=pagenum+1;$i<20;$i++){
  if($i<$pagenum+4){  ?>
  <a href='stuff.php?page=<?php echo $i;?>'><?php echo $i;?></a>
  <?php } elseif($i==$pagenum+4) { ?>
  ... <?php } elseif($i==20){ ?>
  <a href='stuff.php?page=20'>20</a>
  <?php } ?>

答案 3 :(得分:0)

我建议使用标准化库。 Ignacio推荐了PEAR :: Pager库,但我偏爱Zend Framework中的Zend_Paginator。

库中包含各种各样的适配器,其他人在Github上使用不同的数据源。

答案 4 :(得分:0)

如果你在Db和数据访问代码中管理它将是最有效的,你可以有一个带有pageSize,PageNumber,sortOrder等参数的函数。 你的SQL看起来像

SELECT * FROM your_table WHERE condition = true ORDER BY some_field LIMIT 100, 10