排行榜
和
桌子
排行榜得分
包含列:
身份证件
,
排行榜id
,
,
分数
排行榜
有很多
排行榜得分
public function scores()
{
return $this->hasMany('App\LeaderboardScore')->orderBy('score', 'desc');
}
现在我想得到一个球员在某个排行榜上的排名。
所以在控制器中,我做了一个循环来找到给定的位置
:
$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循环似乎不是一个好的选择。
我应该使用原始数据库查询吗?还有更好的主意吗?