有两个表:users
和 score
。分数表包含列 game_id
和 points
。
此查询
return DB::table('users')
->where('users.id', 36)
->leftJoin('score AS education_score', function($query){
$query->on('education_score.user_id', '=', 'users.id')
->where('education_score.game_id', 2);
})
->leftJoin('score AS experience_score', function($query){
$query->on('experience_score.user_id', '=', 'users.id')
->where('experience_score.game_id', 3);
})
->groupBy(['users.id', 'users.name'])
->select([
'users.name',
DB::raw('SUM(education_score.points) AS education_score'),
DB::raw('SUM(experience_score.points) AS experience_score'),
])
->get();
应该返回
[
{
name: "JANE DOE",
education_score: 70,
experience_score: 2
}
]
相反,它返回精确的 double
[
{
name: "JANE DOE",
education_score: 140,
experience_score: 4
}
]
最佳答案
您得到的结果不正确,因为您两次加入同一个表。
使用不同的方法:
return DB::table('users')
->where('users.id', 36)
->leftJoin('score', 'score.user_id', '=', 'users.id')
->groupBy(['users.id', 'users.name'])
->select([
'users.id',
DB::raw('SUM(IF(score.game_id = 2, score.points, 0)) AS education_score'),
DB::raw('SUM(IF(score.game_id = 3, score.points, 0)) AS experience_score')
])
->get();
关于mysql - Laravel DB raw 返回双倍总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52727105/