mongoDB高效分页类_第1页
mongoDB高效分页类_第2页
mongoDB高效分页类_第3页
mongoDB高效分页类_第4页
mongoDB高效分页类_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用Skip和limit可以如下做数据分页:Code:page1 = db.things.find().limit(20)page2 = db.things.find().skip(20).limit(20)page3 = db.things.find().skip(40).limit(20)当数据量很小时,这样做分页完全没有问题。但是当数据量很大时,skip操作会变的很慢,应该避免使用。(不止是mongoDb会这样,大部分数据库都是。)可以通过改变查询文档的规则来达到分页效果,避免使用skip来跳过大量的数据。(通过计算,得到下次查询应该从什么地方开始)<?php/mongoDB分页类

2、class Page var $count=''var $size=''var $total=''var $last=''var $link=''var $url=''var $db=''var $orderby=''var $table=''var $set=''var $page=''var $turnto=''var $key = ''public function _constru

3、ct($table = '', $orderby = array(), $count = '', $size = '', $last = '', $theurl = '', $set = '', $next = '', $prev = '')global $DB;$url = SITE_ROOT.strtolower(CLASS_NAME).'/'.METHOD_NAME;$set = $set ? $set : 5;$this->table =

4、 $table;$this->count = $count;$this->size = $size;$this->last = $last;$this->url = $this->url ? $this->url : $url;$this->set = $set;$this->next = $next;$this->prev = $prev;$this->db = $DB;$this->orderby = $orderby;$this->page = GET:UINT('page');$this->p

5、age = $this->page ? $this->page : 1;/$this->page = $this->page > 0 ? $this->page : GET:UINT('search')>0? GET:UINT('search'):1*/; /$this->page= GET:UINT('search');$this->total = ceil($this->count / $this->size);public function show()if($this-&g

6、t;total != 1)$this->get_first();$this->get_prev();$this->get_center();$this->get_next();$this->get_last();$this->get_turnto();if($this->link)$this->link = $this->turnto.$this->link.'共'.$this->total.'页 '.$this->count.'条记录'if($this->turnto

7、)$this->link .= '</form>'return $this->link;/获取首页private function get_first()if($this->page != 1)if($this->total > 0)$this->link.='<a href="'.$this->url.'" title="首页">首页</a>'/获取上一页private function get_prev()if($this-&

8、gt;prev)$this->link.='<a href="'.$this->url.'/page/'.($this->page - 1).'/id/'.$this->prev.'" title="上一页">上一页</a>'/中间显示private function get_center()$left = ($this->set - $this->page >= 0) ? ($this->page - 1) : $th

9、is->set;$right = ($this->total - $this->page > $this->set) ? $this->set : ($this->total - $this->page);if(!$this->last)$rightresult = $this->db->limit($right * $this->size + 1)->order_by($this->orderby)->get($this->table);else$rightresult = $this->d

10、b->limit($right * $this->size + 1)->where_lte($this->key,$this->last)->order_by($this->orderby)->get($this->table);if($this->last)$this->nor_orderby();$leftresult = $this->db->limit($left * $this->size)->where_gt($this->key,$this->last)->order_by

11、($this->orderby)->get($this->table);$start = ($this->page - $this->set) <= 0 ? 1 : ($this->page - $this->set); $end = ($this->page + $this->set + 1 >= $this->total) ? $this->total + 1 : ($this->page + $this->set + 1);$ii = $left;$iii = 0;/显示左边的for($i = $s

12、tart; $i < $end; $i+, $ii-, $iii+)if($this->page = $i)$this->link.='<a style="color:#06F">'.$i.'</a>'else$the_id = $ii * $this->size - 1;if($the_id > 0)$this->link.='<a href="'.$this->url.'/page/'.$i.'/id/'.$l

13、eftresult$the_id$this->key.'" title="第'.$i.'页">'.$i.'</a>'else$the_id = ($iii - $left) * $this->size;$this->link.='<a href="'.$this->url.'/page/'.$i.'/id/'.$rightresult$the_id$this->key.'" title=&

14、quot;第'.$i.'页">'.$i.'</a>'/获取下一页private function get_next()if($this->next)$this->link.='<a href="'.$this->url.'/page/'.($this->page + 1).'/id/'.$this->next.'" title="下一页">下一页</a>'/获取尾页pri

15、vate function get_last()if($this->page != $this->total)$res = $this->count % $this->size;$this->nor_orderby();if($res > 0)$result = $this->db->limit($res)->order_by($this->orderby)->get($this->table);$this->last = $result$res-1$this->key;$this->link.='

16、;<a href="'.$this->url.'/page/'.$this->total.'/id/'.$this->last.'" title="尾页">尾页</a>'else$result = $this->db->limit($this->size)->order_by($this->orderby)->get($this->table);$this->last = $result$this->si

17、ze-1$this->key;$this->link.='<a href="'.$this->url.'/page/'.$this->total.'/id/'.$this->last.'" title="尾页">尾页</a>'/跳转到private function get_turnto()$this->turnto = '<form action="" method="get" onsubmit="window.location=''.$this->url.'/search/'+this.p.value+''.''return false;">转到第 <input type="text" name="p&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论