php购票排位_PHP查询用户排名名次、Mysql查询用户排名名次的方法

PHP查询用户排名名次、Mysql查询用户排名名次的方法,最近做了用户排行榜,那么就整理了查询用户排行的一些代码,主要分为两部分:PHP、Mysql两者独立查询用户排名信息,当然查询的是所有用户的排名以及当前用户的排名信息。

假设我们有一张用户表:

1、PHP查询方法:直接使用PHP的方式并不是特别推荐的方式,如果数据多的话,筛选可能就比较慢

//获取当前用户信息

$where = [];

$where[] = ['status', '=', 1];

$userinfo = \Db::name('user')->field('openid,nickname,score,last_score_time')->where($where)->find();

//获取积分列表,限制1000条

$where = [];

$where[] = ['status', '=', 1];

$where[] = ['score', 'gt', 0];

$ranking = \Db::name('user')->field('openid,nickname,score,last_score_time')->where($where)->order('score desc,last_score_time asc')->limit(1000)->select();

//数据

$data = [];

//当前用户默认排名

$data['user']['openid'] = $userinfo['openid'];

$data['user']['nickname'] = $userinfo['nickname'];

$data['user']['score'] = $userinfo['score'];

$data['user']['last_score_time'] = $userinfo['last_score_time'];

$data['user']['ranking'] = "1000+"; //超过1000的就显示1000+

if(!empty($ranking)){

foreach ($ranking as $key => $value) {

//排名

$ranking_name = $key + 1;

$ranking[$key]['ranking'] = $ranking_name;

//当前用户排名

if($value['openid'] == $params['openid']){

$data['user']['openid'] = $value['openid'];

$data['user']['nickname'] = $value['nickname'];

$data['user']['score'] = $value['score'];

$data['user']['last_score_time'] = $value['last_score_time'];

//排名

$data['user']['ranking'] = $ranking_name;

}

}

}

//排名列表,取100个

$data['list'] = array_slice($ranking, 0, 100);

2、Mysql查询方法:推荐方式,直接使用mysql查询是比较方便的,也可以结合PHP原生mysql语句查询

1)、查询所有排名信息

查询语句:

SELECT

p.openid,

p.nickname,

p.score,

@rownum := @rownum + 1 AS rownum

FROM

(SELECT

@rownum := 0) r,

(SELECT

*

FROM

`aikehou_wechat_bljl_user`

WHEREscore > 0

ORDER BY score DESC,

last_score_time ASCLIMIT1000) AS p

查询结果:

2)、查询当前用户排名信息

查询语句:

SELECT

b.openid,

b.nickname,

b.score,

b.rownum

FROM

(SELECT

t.*,

@rownum := @rownum + 1 AS rownum

FROM

(SELECT

@rownum := 0) r,

(SELECT

*

FROM

`aikehou_wechat_bljl_user`

WHERE score > 0

ORDER BY score DESC,

last_score_time ASC) ASt) AS b

WHEREb.openid = "oHL30wVEuI58L22gp8dkQ23232mSSW4dU4g";

查询结果:

解释:

1、SELECT @rownum := 0:表示对rownum赋初始值0

2、@rownum := @rownum + 1:表示对rownum加1,语句中会从1开始,每一行往下都自动加1

3、所有用户排名是先对用户表进行积分排序,然后对名次进行累加;当前用户排名,就是在筛选出所有用户排名的基础上再进行当前用户信息进行筛选,说白了就是Mysql的组合查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值