使用laravel的查询生成器,我试图获得特定游戏的综合最高分数。
我目前有我的方法,下面找到一个游戏的最高分数。
public function getHighestScore()
{
return DB::table('scores')
->join('games', 'scores.game_id', '=', 'games.id')
->join('users', 'scores.user_id', '=', 'users.id')
->select('scores.score as return')
->where('scores.game_id', $this->id)
->get()->max('return');
}
这么叫
$game = Game::find(5);
$game->getHighestScore();
正确输出
784
不过,现在我需要能够获得最高(综合用户得分)的游戏,并获得该用户的id。我真的想实现这一点,如果可能的话,一个单一的查询?
我的分数表如下:
+---------+----------+----------+--------+
| id | game_id | user_id | score |
+---------+----------+----------+--------+
| 97 | 5 | 3 | 234 |
| 123 | 3 | 3 | 102 |
| 300 | 5 | 1 | 99 |
| 422 | 5 | 1 | 784 |
| 531 | 5 | 3 | 221 |
| 612 | 3 | 3 | 222 |
| 798 | 3 | 3 | 379 |
+---------+----------+----------+--------+
比如:
$game = Game::find(5);
$game->getUserWithHighestCombinedScore();
这可能吗?我的查询必须包括什么?
为了帮助澄清,我包括以下内容。
如果要合并每个游戏的用户id得分,则假设表如下所示:
+---------+----------+----------+-----------------+
| id | game_id | user_id | combined_score |
+---------+----------+----------+-----------------+
| | 5 | 3 | 455 |
| | 5 | 1 | 883 |
| | 3 | 3 | 703 |
+---------+----------+----------+-----------------+
打个电话给
$game->getUserWithHighestCombinedScore();
都会回来的
// user_id
1
// combined_score of
883
所以他们需要在 ->select()
属性。
这可能吗?
1条答案
按热度按时间p5cysglq1#
首先,对于你的第一个问题,我认为你不需要那么多
joins
你可以这么做。对于你的问题,我认为这应该管用。