• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-24) 18次浏览 已收录 0个评论

这篇文章主要介绍了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='$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<mark style="color:transparent">本%文来源gaodaimacom搞#^代%!码网@</mark>搞代gaodaima码" 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);}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:thinkPHP中统计排行与分页显示的功能
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址