Rumah > pembangunan bahagian belakang > tutorial php > thinkPHP中统计排行与分页显示的功能

thinkPHP中统计排行与分页显示的功能

不言
Lepaskan: 2023-03-30 14:10:01
asal
3745 orang telah melayarinya

这篇文章主要介绍了thinkPHP统计排行与分页显示功能,结合实例形式分析了thinkPHP数据库查询与结果分页显示相关操作技巧,需要的朋友可以参考下

本文实例分析了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=&#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>
Salin selepas log masuk

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);
}
Salin selepas log masuk

这里用的是thinkphp的分页类实现的。

案例效果

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

thinkphp实现分页显示功能

统计ThinkPHP的捐赠总额,仅为娱乐,不要太较真

Atas ialah kandungan terperinci thinkPHP中统计排行与分页显示的功能. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Isu terkini
ThinkPHP Mengapa menggunakan komposer?
daripada 1970-01-01 08:00:00
0
0
0
thinkphp memuat naik fail
daripada 1970-01-01 08:00:00
0
0
0
Bagaimanakah Thinkphp memanggil sambungan PHP?
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan