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


Posted in PHP onDecember 02, 2016

本文实例分析了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>
<div class="top text-center">
  <div 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>
  </div>
</div>
<div id="myrank" class="alert alert-danger text-center">
  我的商户数:{sh:$my_user_count}    当前排名: {sh:$my_rank}
</div>
<div 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>
<div class="page text-right">
    {sh:$page}
</div>
</div>
</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);
}

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

案例效果

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

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP常用代码
Nov 23 PHP
珊瑚虫IP库浅析
Feb 15 PHP
php 字符转义 注意事项
May 27 PHP
Blitz templates 最快的PHP模板引擎
Apr 06 PHP
php学习之 循环结构实现代码
Jun 09 PHP
PHP执行批量mysql语句的解决方法
May 02 PHP
探讨如何把session存入数据库
Jun 07 PHP
php生成PDF格式文件并且加密
Jun 22 PHP
浅谈PHP中output_buffering
Jul 13 PHP
解析PHP之提取多维数组指定列的方法
Jan 03 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
thinkPHP交易详情查询功能详解
Dec 02 #PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 #PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 #PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 #PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 #PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 #PHP
PHP面向对象程序设计之类与反射API详解
Dec 02 #PHP
You might like
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
动易数据转成dedecms的php程序
2007/04/07 PHP
PHP 柱状图实现代码
2009/12/04 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
基于jquery的跨域调用文件
2010/11/19 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
浅谈对yield的初步理解
2017/05/29 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
深入了解Python在HDA中的应用
2019/09/05 Python
如何获取Python简单for循环索引
2019/11/21 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
法学毕业生自我鉴定
2013/11/08 职场文书
淘宝网店营销策划书
2014/01/11 职场文书
英文演讲稿开场白
2014/08/25 职场文书
项目合作协议书
2014/09/23 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
2015年服务员工作总结
2015/04/08 职场文书
干部外出学习心得体会
2016/01/18 职场文书
怎么用Python识别手势数字
2021/06/07 Python