【发布时间】:2021-04-21 00:19:17
【问题描述】:
我正在尝试解决如何正确显示积分排名以显示排行榜。
我的模态中目前有以下内容
public function getPointrankAttribute(){
$year = Carbon::parse(Carbon::now())->year;
$pointrank = Points::query()
->select('member_id')->selectRaw('SUM(value) as TotalPoints')
->where('Year','=', $year)
->groupBy('member_id')
->orderByDesc('Totalpoints')
->get();
return $pointrank->search(function($points){
return $points->member_id == $this->id;
}) + 1;
}
这很好用,但是它使用表格中的行位置来显示排名,所以第一条记录是第 1 条,第 2 条记录显示为第 2 条。
但是,当成员的总分相同时,就会出现问题,因为在此情况下,排名是基于在表格中的位置
看下面的例子
|member_id|totalpoints|
| 12 | 20 |
| 3 | 10 |
| 10 | 10 |
| 5 | 5 |
在此示例中基于我当前的解决方案
成员 12 = 1,成员 3 = 2,成员 10 = 3,成员 5 = 4
我想要的是以下
成员 12 = 1,成员 3 = 2,成员 10 = 2,成员 5 = 4
如果我们有超过 1 个成员共享该职位(如本例中的成员 3 和 10),我也可以添加“=”,那将是很棒的
提前致谢
【问题讨论】:
-
如果您需要分配排名的数据库版本,请在您的问题中从点表中添加一些示例数据
-
@MKhalidJunaid 感谢您的回复。您是否需要比我的查询创建的临时表更多的信息?我已经列出了 Member_id 和 Totalpoints,它们是表中的 2 个字段。想要我想使用排名方法而不是使用行号,如我上面的问题中所列。
-
是的,我需要点表中的示例数据,以便我可以建议将返回用户排名的 SQL 查询
标签: php sql laravel rank leaderboard