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} &nbsp;&nbsp; 当前排名: {sh:$my_rank}
</div>
<div id="datalist">
<table class="table table-hover">
<thead>
<tr>
<th>&nbsp;&nbsp;#</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 />
&nbsp;&nbsp;{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的分页类实现的。

案例效果

PHP统计排行,分页的更多相关文章

  1. Django项目:CRM(客户关系管理系统)--80--70PerfectCRM实现CRM业务流程(bpm)课程排行分页

    # coursetop_views.py # ————————64PerfectCRM实现CRM课程排名详情———————— #————班级学生详情——#计算#{学员ID:分数}——#计算 #{学员I ...

  2. mysql优化---订单查询优化:异步分页处理

    订单分页查询: 老的代码是顺序执行查询数据和计算总记录数,但是如果条件复杂的话(比如关联子表)查询的时间要超过20s种 public static PagedList<Map<String ...

  3. ajax实现无刷新分页效果

    基于jquery.pagination.js实现的无刷新加载分页数据效果. 简介与说明 * 该插件为Ajax分页插件,一次性加载数据,故分页切换时无刷新与延迟.如果数据量较大,加载会比较慢. * 分页 ...

  4. mysql优化---订单查询优化(2):异步分页处理

    订单分页查询: 老的代码是顺序执行查询数据和计算总记录数,但是如果条件复杂的话(比如关联子表)查询的时间要超过20s种 public static PagedList<Map<String ...

  5. empireCMS 帝国cms功能总结

    上1 系统 对应左菜单为 系统设置 系统参数设置 基本属性 站点名称,网站地址,关键字,简介,首页模式,php时间, 前台功能,操作时间,来源地址,验证码 用户属性 后台验证码开启,次数限制,时间限制 ...

  6. 《实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)》

    <实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)> 基本信息 作者: 徐康明    辛洪郁 出版社:电子工业出版社 ISBN:9787121221378 上架时间:2014 ...

  7. 使用ElasticSearch赋能HBase二级索引 | 实践一年后总结

    前言:还记得那是2018年的一个夏天,天气特别热,我一边擦汗一边听领导大刀阔斧的讲述自己未来的改革蓝图.会议开完了,核心思想就是:我们要搞一个数据大池子,要把公司能灌的数据都灌入这个大池子,然后让别人 ...

  8. phpwind < v6 版本命令执行漏洞

    phpwind/sort.php 会定期每天处理一次帖子的浏览量.回复量.精华版排序 代码直接使用savearray将数据库查询出来的内容写入php文件,savearray出来的参数,都使用" ...

  9. python 访问php程序,实现定时

    #!/usr/bin/python #test2.py import sys import urllib2 j = True jj = 1##########用于统计,所以分页, url = 'htt ...

随机推荐

  1. spring3: 4.4 使用路径通配符加载Resource

    4.4.1  使用路径通配符加载Resource 前面介绍的资源路径都是非常简单的一个路径匹配一个资源,Spring还提供了一种更强大的Ant模式通配符匹配,从能一个路径匹配一批资源. Ant路径通配 ...

  2. mvvm2

    1:设计模式 在MVP模式中,为了让UI层能够从逻辑层上分离下来,设计师们在UI层与逻辑层之间加了一层interface.无论是UI开发人员还是数据开发人员,都要尊重这个契约.按照它进行设计和开发.这 ...

  3. NLP(二)_汉语言分词技术-最大匹配法

    前述 词是自然语言中最小的有意义的构成单位.汉语文本是基于单字的文本,汉语的书面表达方式以汉字作为最小单元,词与词之间没有明显的界限标志,因此,分词是汉语文本分析处理中首先要解决的问题之一. 分词可能 ...

  4. idea解决@Data注解报红问题

    lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立ge ...

  5. iOS-沙盒路径

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么.documents,tmp,app,Library.(NSHomeDirectory() ...

  6. iOS调试技巧(debug)

        说到debug,可以说到的东西就太多了,一个程序员,即使逻辑非常出色,也会出现bug问题,那么debug是每个程序员必备的技巧,尤其是Xcode开发, 苹果公司的开发的Xcode真的是十分强大 ...

  7. 32-THREE.JS 球体

    <!DOCTYPE html> <html> <head> <title>Example 05.05 - Basic 3D geometries - S ...

  8. 5天不再惧怕多线程——第一天 尝试Thread

    随笔 - 218  文章 - 1  评论 - 3819 5天不再惧怕多线程——第一天 尝试Thread   原本准备在mongodb之后写一个lucene.net系列,不过这几天用到多线程时才发现自己 ...

  9. 《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group

    agenda-group 规则的调用与执行是通过StatelessKieSession或KieSession来实现的,一般的顺序是创建一个StatelessKieSession或KieSession, ...

  10. 手把手教你怎么用ArcgisOnline发布地图服务

    Arcgis推出了Arcgis Online,但是大家都不知道这是个什么东西,怎么用这个东西,今天这篇文章手把手的教你如何使用Arcgisonline发布地图服务. 一.ArcgisOnline简介 ...