<?php namespace app\common\fun; use think\db; class Jfrank { /** * @param string $day 日期单位 day天 week周 month月 * @param int $num 具体日期数字1 比如1天 1周 1月 * @param int $rows 返回行数 * @return array */ public function ranking($row=10,$day='week',$num=1){ $array =[]; $map['posttime'] = fun('time@only',$day,$num); $map['money'] = ['>',0]; $rs = Db::name('moneylog')->field('uid,SUM(money) as s_money') ->where($map) ->group('uid') ->order('s_money desc') ->limit($rows) ->select(); foreach($rs As $arr){ $uid = $arr['uid']; $info = Db::name('memberdata')->where('uid',$uid)->find(); $array[] = array_merge($info,$arr); } return $array; } }
<h2>本周积分排行</h2> {volist name=":fun('Jfrank@ranking')" id="rs"} <div> <span><img src="{$rs.icon|tempdir}" width="20" height="20" /></span> <span>{$rs.username}</span> <span>本周总赚取的积分:{$rs.s_money}</span> </div> {/volist}
{ :fun('Jfrank@ranking',10,'week',1)} 默认为返回10个用户一周内的从大到小的赚取积分排行
如果需要其他时间段,则传递参数,参数上面代码已经说明
比如需要今天一天的,则是:
{ :fun('Jfrank@ranking',10,'day',1)}
一个月的则是:
{ :fun('Jfrank@ranking',10,'month',1)}
一年的则是:
{ :fun('Jfrank@ranking',10,'month',12)}
怎么才能不统计充值增加的积分呢?只统计签到和奖励等方式获得的积分,谢谢
非常感谢,@torylf,如果想显示上周的积分排行,时间应该怎么写呢?