Home  >  Article  >  Backend Development  >  Statistics ranking and paging display functions in thinkPHP

Statistics ranking and paging display functions in thinkPHP

不言
不言Original
2018-06-07 16:10:273681browse

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=&#39;$type neq 1&#39;>active</if>" href="{sh::U(&#39;User/ranklist&#39;, array(&#39;type&#39; => 0))}">月排行</a>
    <a class="title_child <if condition=&#39;$type eq 1&#39;>active</if>" href="{sh::U(&#39;User/ranklist&#39;, array(&#39;type&#39; => 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(&#39;type&#39;,&#39;trim&#39;);
    $this->assign(&#39;type&#39;,$type);
    $opener_id = $this->opener_id;
    if($type == 0){ // 上月排行
      $arrLastMonth = $this->getLastMonthStartEndDay();
      $lastStartDay = $arrLastMonth[&#39;lastStartDay&#39;];
      $lastEndDay = $arrLastMonth[&#39;lastEndDay&#39;].&#39; 23:59:59&#39;; 
      $b_time = strtotime($lastStartDay);
      $e_time = strtotime($lastEndDay);
      $where[&#39;b.addtime&#39;] = array(array(&#39;gt&#39;,$b_time),array(&#39;lt&#39;,$e_time),&#39;and&#39;); 
    }
    $where[&#39;a.status&#39;] = array(&#39;eq&#39;,&#39;1&#39;);
    M()->query(&#39;SET @rank =0;&#39;);
    $subQuery = M()->table(&#39;sh_opener a&#39;)->join(&#39;sh_user b on a.id = b.opener_id&#39;)->where($where)->group(&#39;a.id&#39;)->order(&#39;usercount desc&#39;)->field(&#39;a.id,count(b.id) as usercount,a.name&#39;)->select(false);
    $all = M()->table(&#39;&#39;.$subQuery.&#39; a&#39;)->getField(&#39;a.id,a.usercount,a.name,(@rank:=IFNULL(@rank,0)+1) as rank&#39;);
    $count   = count($all);
    $Page    = new Page($count, 10);
    $list    = M()->table(&#39;sh_opener a&#39;)->join(&#39;sh_user b on a.id = b.opener_id&#39;)->where($where)->group(&#39;a.id&#39;)->order(&#39;usercount desc&#39;)->limit($Page->firstRow.&#39;,&#39;.$Page->listRows)->field(&#39;count(b.id) as usercount,a.name,a.id&#39;)->select();
    foreach ($list as $k => $v) {
      $list[$k][&#39;rank&#39;] = $k + 1 + $Page->firstRow;
    }
    // 我的商户
    $my_user_count = $all[$opener_id][&#39;usercount&#39;]?$all[$opener_id][&#39;usercount&#39;]:0;
    $my_rank = $all[$opener_id][&#39;rank&#39;]?$all[$opener_id][&#39;rank&#39;]:&#39;-&#39;;
    $this->assign(&#39;my_user_count&#39;,$my_user_count);
    $this->assign(&#39;my_rank&#39;,$my_rank);
    $this->assign(&#39;page&#39;,$Page->show());
    $this->assign(&#39;list&#39;, $list);
    $this->display();
}
// 获取上一月开始与结束日期
private function getLastMonthStartEndDay(){
    $thismonth = date(&#39;m&#39;);
    $thisyear = date(&#39;Y&#39;);
    if ($thismonth == 1) {
      $lastmonth = 12;
      $lastyear = $thisyear - 1;
    } else {
      $lastmonth = $thismonth - 1;
      $lastyear = $thisyear;
    }
    $lastStartDay = $lastyear . &#39;-&#39; . $lastmonth . &#39;-1&#39;;
    $lastEndDay  = $lastyear . &#39;-&#39; . $lastmonth . &#39;-&#39; . date(&#39;t&#39;, strtotime($lastStartDay)); //t 给定月份所应有的天数,28到31
    return array(&#39;lastStartDay&#39;=>$lastStartDay,&#39;lastEndDay&#39;=>$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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn