排行榜的实现,如何查询自己的排名

正常查询 排名 我们可以用 limitgroupBy
有个疑问,比如说我查询 前 10 名,值展示前 10 名用户,我在前 10 名后面,如何获取到我自己的排名
可以用 foreach 但是感觉不是和优雅,有什么优雅的方式吗.....

与其感慨路难行,不如马上出发。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

可以不用全查,比如你查积分排行榜,获取积分比你多的用户就行,你的排名就是结果总个数,前十名取前 10 个

5年前 评论
小猪蹄子 5年前
讨论数量: 11
Epona

先一起查询出来,然后将前 10 名和自己的名次分给两个变量就可以了。

5年前 评论

可以不用全查,比如你查积分排行榜,获取积分比你多的用户就行,你的排名就是结果总个数,前十名取前 10 个

5年前 评论
小猪蹄子 5年前

@Epona 全查询很难受的... 一个页面多个排行版就感觉不是那么回事...

5年前 评论

@pigzzz 如果有一天这个用户排到第一名了呢,,排行榜就只有 1 位而不是 10 位了.. :grin:

5年前 评论
pigzzz 5年前

@Zippo 所以还是要减少骚操作啊. :joy:老实全部查询

5年前 评论

@kangfq 我就在想哈,比如一个页面三个排行,然后排到 1000 名,就感觉不是那么回事... :pensive:

5年前 评论

优不动了,hhhhh

//先取排名
$data=Ranking::selectRaw('id,num,user_id,if(@rowNum,@rowNum := @rowNum +1,@rowNum := 1) as rank_num') ->orderBy('num','desc')->get();
//集合生成数组
$result=$data->pluck('rank_num','user_id')->toArray();
//取用户名次
$user_rank=$result[$user_id];
5年前 评论
打酱油的和尚 4年前
小猪蹄子 (作者) 4年前

明显 MySQL 不适合做这种事情。redis 的有序集合了解一下。

5年前 评论
小猪蹄子 5年前
ononl 5年前
Kevin_metnick

这个 sql 应该是可以实现你的需求 里面只要根据你的需求修改条件就可以了

select * from table limit 0,10 
UNION 
(select * from table where id=当前用户id );
5年前 评论