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

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

与其感慨路难行,不如马上出发。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

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

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

4年前 评论

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

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

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

4年前 评论

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

4年前 评论
pigzzz 4年前

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

4年前 评论

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

4年前 评论

优不动了,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];
4年前 评论
打酱油的和尚 3年前
小猪蹄子 (作者) 3年前

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

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

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

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

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!