我想在PHP中实现分页。我有一些来自db的结果集,让它成为一个数组。 我需要一个页面,每页应显示4条记录,页码应该是以下
“<<< 1,2,3 ..... 20>>”
当您选择第2页时,格式应为以下内容
“<<<< 3,4,5 ..... 20>>”
你们可以建议我实现一些分页概念吗?
答案 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