本文实例分析了thinkphp统计排行与分页显示功能。分享给大家供大家参考,具体如下:
1.分页参数
count 总数
firstrow 起始行
listrows 每一次获取记录数
list 每一页的记录(要与count对应一致就行)
2.分页对象
可以针对真实的数据表
也可以针对统计出来的数据表,或者说是虚拟的表
因为limit是最后执行的,哪怕你进行group操作,哪怕你进行子查询
html
<include file="public:head" title="" /><style type="text/css">.top { font-size: 18px; border-bottom: #ddd 1px solid; margin-bottom: -1px; font-weight: bold;}.top .title { margin:10px; border:1px solid #ef6c00; display:-webkit-box; border-radius: 3px;}.top .title .title_child { width: 50%; line-height:40px; -webkit-box-flex:1; display:block; color:#ef6c00; text-decoration:none;}.top .title .title_child.active { color:#fff; background:#ef6c00;}.page{ margin-right: 10px;}.ranknum{ font-weight: bold; color:#f92672;}#myrank{ color: #fff; font-weight:bold; background-color: #fbc853;}</style><script type="text/javascript"></script><body><p class="top text-center"> <p class="title"> <a class="title_child <if condition='$type neq 1'>active</if>" href="{sh::u('user/ranklist', array('type' => 0))}">月排行</a> <a class="title_child <if condition='$type eq 1'>active</if>" href="{sh::u('user/ranklist', array('type' => 1))}">总排行</a> </p></p><p id="myrank" class="alert alert-danger text-center"> 我的商户数:{sh:$my_user_count} 当前排名: {sh:$my_rank}</p><p id="datalist"><table class="table table-hover"> <thead> <tr> <th> #</th> <th>姓名</th> <th>商户数</th> </tr> </thead> <tbody> <volist name="list" id="vo"> <tr> <th scope="row" class="ranknum"> <if condition="$vo.rank eq 1"><img src="{sh::res}public/img/gold.png" style="width: 30px;"> <elseif condition="$vo.rank eq 2"/><img src="{sh::res}public/img/silver.png" style="width: 30px;"> <elseif condition="$vo.rank eq 3"/><img src="{sh::res}public/img/copper.png" style="width: 30px;"> <else /> {sh:$vo.rank} </if> </th> <td>{sh:$vo.name}</td> <td>{sh:$vo.usercount}</td> </tr> </volist> </tbody></table><p class="page text-right"> {sh:$page}</p></p></body></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中统计排行与分页显示的功能的详细内容。