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 编写的日历
Oct 09 PHP
第九节--绑定
Nov 16 PHP
php二分法在IP地址查询中的应用
Aug 12 PHP
php at(@)符号的用法简介
Jul 11 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
PHP的全局错误处理详解
Apr 25 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
May 12 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 PHP
php进行md5加密简单实例方法
Sep 19 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
帅气的琦玉老师
2020/03/02 日漫
PHP 危险函数解释 分析
2009/04/22 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
Yii2中datetime类的使用
2016/12/17 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
对python函数签名的方法详解
2019/01/22 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
使用python远程操作linux过程解析
2019/12/04 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
500行python代码实现飞机大战
2020/04/24 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
美国折扣网站:jClub
2017/08/07 全球购物
医学检验专业个人求职信范文
2013/12/04 职场文书
单位提档介绍信
2014/01/17 职场文书
投资合作协议书
2014/04/17 职场文书
公司户外活动总结
2014/07/04 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
导游词之崇武古城
2019/10/07 职场文书
导游词之吉林花园山
2019/10/17 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android