本文实例分析了thinkphp统计排行与分页显示功能。分享给大家供大家参考,具体如下:
1.分页参数
count | 总数 |
firstrow | 起始行 |
listrows | 每一次获取记录数 |
list | 每一页的记录(要与count对应一致就行) |
2.分页对象
可以针对真实的数据表
也可以针对统计出来的数据表,或者说是虚拟的表
因为limit是最后执行的,哪怕你进行group操作,哪怕你进行子查询
html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
< 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
// 排行榜
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框架的php程序设计有所帮助。