thinkPHP统计排行与分页显示功能示例
2018-09-07 17:18
本文实例分析了thinkPHP统计排行与分页显示功能。分享给大家供大家参考,具体如下:
1.分页参数
count 总数 firstRow 起始行 listRows 每一次获取记录数 list 每一页的记录(要与count对应一致就行)
2.分页对象
可以针对真实的数据表
也可以针对统计出来的数据表,或者说是虚拟的表
因为LIMIT是最后执行的,哪怕你进行group操作,哪怕你进行子查询
html
php
// 排行榜 public function ranklist(){ $type = $this->_get(type,trim); $this->assign(type,$type); $opener_id = $this->opener_id; if($type == 0){ // 上月排行 $arrLastMonth = $this->getLastMonthStartEndDay(); $lastStartDay = $arrLastMonth[lastStartDay]; $lastEndDay = $arrLastMonth[lastEndDay]. 23:59:59; $b_time = strtotime($lastStartDay); $e_time = strtotime($lastEndDay); $where[b.addtime] = array(array(gt,$b_time),array(lt,$e_time),and); } $where[a.status] = array(eq,1); M()->query(SET @rank =0;); $subQuery = M()->table(sh_opener a)->join(sh_user b on a.id = b.opener_id)->where($where)->group(a.id)->order(usercount desc)->field(a.id,count(b.id) as usercount,a.name)->select(false); $all = M()->table(.$subQuery. a)->getField(a.id,a.usercount,a.name,(@rank:=IFNULL(@rank,0)+1) as rank); $count = count($all); $Page = new Page($count, 10); $list = M()->table(sh_opener a)->join(sh_user b on a.id = b.opener_id)->where($where)->group(a.id)->order(usercount desc)->limit($Page->firstRow.,.$Page->listRows)->field(count(b.id) as usercount,a.name,a.id)->select(); foreach ($list as $k => $v) { $list[$k][rank] = $k + 1 + $Page->firstRow; } // 我的商户 $my_user_count = $all[$opener_id][usercount]?$all[$opener_id][usercount]:0; $my_rank = $all[$opener_id][rank]?$all[$opener_id][rank]:-; $this->assign(my_user_count,$my_user_count); $this->assign(my_rank,$my_rank); $this->assign(page,$Page->show()); $this->assign(list, $list); $this->display(); } // 获取上一月开始与结束日期 private function getLastMonthStartEndDay(){ $thismonth = date(m); $thisyear = date(Y); if ($thismonth == 1) { $lastmonth = 12; $lastyear = $thisyear - 1; } else { $lastmonth = $thismonth - 1; $lastyear = $thisyear; } $lastStartDay = $lastyear . - . $lastmonth . -1; $lastEndDay = $lastyear . - . $lastmonth . - . date(t, strtotime($lastStartDay)); //t 给定月份所应有的天数,28到31 return array(lastStartDay=>$lastStartDay,lastEndDay=>$lastEndDay); }
这里用的是thinkphp的分页类实现的。
案例效果
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》、《smarty模板入门基础教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。