0
我有一个排行榜和排行榜分数表。Laravel获得集合中排名/排名
leaderboard_scores有列:ID,leaderboard_id,player_id,得分。
在排行榜模型,我定义了一个的hasMany关系与LeaderboardScore:
public function scores()
{
return $this->hasMany('App\LeaderboardScore')->orderBy('score', 'desc');
}
现在我希望得到一个球员的排名在一个特定的排行榜。
所以在控制器,我做一个循环,找到位置给出一个player_id:
$score = $leaderboard->scores;
$scoreCount = $scores->count();
$myScore = $scores->where('player_id', $request->query('player_id'));
if ($myScore) { // If got my score
$myRank = 1;
for ($i = 0; $i < $scoreCount; $i++) {
if ($scores[$i]->player_id == $request->query('player_id')) {
$myRank = $i + 1;
break;
}
}
// Output or do something with $myRank
}
它工作正常,但我担心的表现,当我有十万的球员,他们不断获得他们的排名。 for循环似乎不是一个好的选择。
我应该使用原始数据库查询吗?或者有更好的主意?相反,每次你的请求,然后遍历所有的数据时间计算行列