最近在用php写后台管理网站,改进功能时想到数据显示,实现的分页的功能显示,单纯用php+mongodb实现。代码如图:
<?php
require_once 'dengluclass.php';
$pagesize=8; //一页显示的数据个数
$pagecount=0; //数据一共多少页
$pagenow=1; //当前页数
$test=new dengluclass();
$pagecount=$test->getpagecount($pagesize); //通过count函数 获取数据显示多少页
if(!empty($_GET['pagenow']) ) //初次调用当前页码为1 接下来通过href标签获取下页页数
{
if($_GET['pagenow']<=$pagecount)
{
$pagenow=$_GET['pagenow'];
}
else{};
}
$cursor=$test->getlist($pagenow,$pagesize);
while($cursor->hasnext()){
$value=$cursor->getnext();
echo '<tr align=center class=d>';
echo '<td>'.$value["kehuhao"].'</td>';
echo '<td>'.$value["xingming"].'</td>';
echo '</tr>';
}
if($pagenow>1){
$prePage=$pagenow-1;
echo "<a href='dengluxinxi.php?pagenow=$prePage'>上一页</a> "; //href标签上页
}
if($pagenow<$pagecount){
$nextPage=$pagenow+1;
echo "<a href='dengluxinxi.php?pagenow=$nextPage'>下一页</a> ";
}
echo "<a href='#'><<</a>";
echo "<a href='#'>>></a>";
echo "当前页{$pagenow}/总共页{$pagecount}";
echo "<br>";
?>
?>
dengluclass.php
<?php
require_once 'dengluclass.php';
error_reporting(E_ALL & ~E_NOTICE);
class dengluclass{
public function getpagecount($pagecount){
$conn=new Mongo("mongodb://localhost:27017");
$collection=$conn->kehuguanli->dengluxinxi;
$count=ceil($collection->count()/$pagecount);
return $count;
}
public function getlist($pageNow, $pageSize)
{
$conn=new Mongo("mongodb://localhost:27017");
$collection=$conn->kehuguanli->dengluxinxi;
$res=$collection->find()->skip(($pageNow-1)*$pageSize)->limit($pageSize);
return $res;
}
}
?>
简单来说,就是通过skip+limit实现分页,但是目前skip对于市面上的数据库,都是一笔不小的开销。当数据量很大时,skip就会变得很慢,网上的有的说用where+limit
整体思想就是先排序然后在limit,博主正在研究,静等更新。