php按照,php 按照排名来分页的功能

该博客介绍了如何使用PHP实现商户的排行榜功能,包括获取上月的数据统计,并展示商户的用户数量排名。代码中涉及了时间条件查询、分组、排序以及LIMIT分页操作,同时展示了如何获取当前登录商户的排名和用户数量。
摘要由CSDN通过智能技术生成

// 排行榜

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);

}

来源:http://www.php.cn/php-weizijiaocheng-401684.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值