温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

thinkPHP中怎么实现统计排行与分页显示功能

发布时间:2021-07-26 14:40:37 来源:亿速云 阅读:257 作者:Leah 栏目:开发技术

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> <div class="top text-center">   <div 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>   </div> </div> <div id="myrank" class="alert alert-danger text-center">   我的商户数:{sh:$my_user_count} &nbsp;&nbsp; 当前排名: {sh:$my_rank} </div> <div id="datalist"> <table class="table table-hover">    <thead>     <tr>      <th>&nbsp;&nbsp;#</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" >      <elseif condition="$vo.rank eq 2"/><img src="{sh::RES}public/img/silver.png" >      <elseif condition="$vo.rank eq 3"/><img src="{sh::RES}public/img/copper.png" >      <else />      &nbsp;&nbsp;{sh:$vo.rank}      </if>      </th>      <td>{sh:$vo.name}</td>      <td>{sh:$vo.usercount}</td>     </tr>     </volist>    </tbody> </table> <div class="page text-right">     {sh:$page} </div> </div> </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中怎么实现统计排行与分页显示功能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI