作者:mobiledu2502902537 | 来源:互联网 | 2021-08-14 19:54
本文实例分析了thinkPHP统计排行与分页显示功能。分享给大家供大家参考,具体如下:
1.分页参数
count |
总数 |
firstRow |
起始行 |
listRows |
每一次获取记录数 |
list |
每一页的记录(要与count对应一致就行) |
2.分页对象
可以针对真实的数据表
也可以针对统计出来的数据表,或者说是虚拟的表
因为LIMIT是最后执行的,哪怕你进行group操作,哪怕你进行子查询
html
我的商户数:{sh:$my_user_count} 当前排名: {sh:$my_rank}
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程序设计有所帮助。