Home >Backend Development >PHP Tutorial >Statistics ranking and paging display functions in thinkPHP
This article mainly introduces the statistical ranking and paging display functions of thinkPHP, and analyzes the operation skills related to thinkPHP database query and result paging display in the form of examples. Friends in need can refer to the following
This article analyzes thinkPHP with examples Statistical ranking and paging display functions. Share it with everyone for your reference, the details are as follows:
1. Paging parameters
count | Total number |
firstRow | Starting row |
listRows | Get the number of records each time |
list | The records of each page (it must be consistent with the count) |
2. Paging object
It can be for a real data table
It can also be for a statistically calculated data table, or a virtual table
Because LIMIT is executed last, even if you perform group operations, even if you Make a subquery
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); }
here It is implemented using thinkphp's paging class.
Case Effect
The above is the entire content of this article. I hope it will be helpful to everyone’s study. For more related content, please pay attention to the PHP Chinese website!
Related recommendations:
thinkphp implements paging display function
Statistics of ThinkPHP’s total donations are for entertainment only, not too much Realistic
The above is the detailed content of Statistics ranking and paging display functions in thinkPHP. For more information, please follow other related articles on the PHP Chinese website!