php mongodb實現分頁操作


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章