本文实例分析了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程序设计有所帮助。