thinkPHP統(tǒng)計(jì)排行與分頁顯示功能示例
本文實(shí)例分析了thinkPHP統(tǒng)計(jì)排行與分頁顯示功能。分享給大家供大家參考,具體如下:
1.分頁參數(shù)
| count | 總數(shù) |
| firstRow | 起始行 |
| listRows | 每一次獲取記錄數(shù) |
| list | 每一頁的記錄(要與count對(duì)應(yīng)一致就行) |
2.分頁對(duì)象
可以針對(duì)真實(shí)的數(shù)據(jù)表
也可以針對(duì)統(tǒng)計(jì)出來的數(shù)據(jù)表,或者說是虛擬的表
因?yàn)長(zhǎng)IMIT是最后執(zhí)行的,哪怕你進(jìn)行g(shù)roup操作,哪怕你進(jìn)行子查詢
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ù):{sh:$my_user_count} 當(dāng)前排名: {sh:$my_rank}
</div>
<div id="datalist">
<table class="table table-hover">
<thead>
<tr>
<th> #</th>
<th>姓名</th>
<th>商戶數(shù)</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();
}
// 獲取上一月開始與結(jié)束日期
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 給定月份所應(yīng)有的天數(shù),28到31
return array('lastStartDay'=>$lastStartDay,'lastEndDay'=>$lastEndDay);
}
這里用的是thinkphp的分頁類實(shí)現(xiàn)的。
案例效果

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》、《smarty模板入門基礎(chǔ)教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
關(guān)于PHP5.6+版本“No input file specified”問題的解決
這篇文章主要介紹了關(guān)于PHP5.6+版本“No input file specified”問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
基于在生產(chǎn)環(huán)境中使用php性能測(cè)試工具xhprof的詳解
本篇文章是對(duì)在生產(chǎn)環(huán)境中使用php性能測(cè)試工具xhprof進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
利用PHP?POST臨時(shí)文件機(jī)制實(shí)現(xiàn)任意文件上傳的方法詳解
這篇文章主要介紹了利用?PHP?POST?臨時(shí)文件機(jī)制實(shí)現(xiàn)任意文件上傳,同時(shí)該過程也會(huì)打斷 php 對(duì)臨時(shí)文件的處理,雖然最終仍會(huì)被刪除,但相較之前可以明顯看出臨時(shí)文件在磁盤的中存在的時(shí)間變長(zhǎng)了,需要的朋友可以參考下2022-04-04
如何使用jQuery+PHP+MySQL來實(shí)現(xiàn)一個(gè)在線測(cè)試項(xiàng)目
本文將結(jié)合實(shí)例給大家介紹如何使用jQuery+PHP+MySQL來實(shí)現(xiàn)在線測(cè)試題,包括動(dòng)態(tài)讀取題目,答題完畢后臺(tái)評(píng)分,并返回答題結(jié)果。2015-04-04
ThinkPHP5.0多個(gè)文件上傳后找不到臨時(shí)文件的修改方法
這篇文章主要介紹了ThinkPHP5.0多個(gè)文件上傳后找不到臨時(shí)文件的修改方法,需要的朋友可以參考下2018-07-07

