// 排行榜

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