最近在用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,博主正在研究,靜等更新。