Heim  >  Artikel  >  Backend-Entwicklung  >  Statistik-Ranking- und Paging-Anzeigefunktionen in thinkPHP

Statistik-Ranking- und Paging-Anzeigefunktionen in thinkPHP

不言
不言Original
2018-06-07 16:10:273682Durchsuche

In diesem Artikel werden hauptsächlich die statistischen Ranking- und Paging-Anzeigefunktionen von thinkPHP vorgestellt und die Betriebsfähigkeiten im Zusammenhang mit der ThinkPHP-Datenbankabfrage und der Ergebnis-Paging-Anzeige anhand von Beispielen analysiert

Dieser Artikel analysiert thinkPHP anhand von Beispielen für statistisches Ranking und Paging-Anzeigefunktionen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

2 🎜>
count 总数
firstRow 起始行
listRows 每一次获取记录数
list 每一页的记录(要与count对应一致就行)
Es kann auf reale Datentabellen abzielen

Es kann auch auf statistische Datentabellen oder virtuelle Tabellen abzielenDa LIMIT zuletzt ausgeführt wird, selbst wenn Sie Gruppenoperationen ausführen, selbst wenn Sie Unterabfragen ausführen

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);
}

Hier wird die Paging-Klasse von thinkphp verwendet realisiert.

Falleffekt

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein Achtung auf die chinesische PHP-Website!

Verwandte Empfehlungen:

thinkphp implementiert die Paging-Anzeigefunktion

Statistiken über die Gesamtspende von ThinkPHP dienen nur der Unterhaltung, nicht wahr? Sei nicht zu realistisch

Das obige ist der detaillierte Inhalt vonStatistik-Ranking- und Paging-Anzeigefunktionen in thinkPHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn