0

テーブルをナビゲートし、SQL ステートメントを GROUP BY team_id に構造化するのに少し問題があります (Laravel 4 Fluent を使用)。GROUP BY を削除すると、各ユーザーの合計ステップが取得されます。しかし、私が必要としているのは、各チームの総歩数です。

SQL ステートメント:

SELECT  `user_challenge`.`team_id` ,  `teams`.`name` , (
SELECT SUM( activities.steps ) 
FROM activities
WHERE activities.user_id = users.id
AND activities.created_at <=  '2013-11-30 15:32:45'
AND activities.date >=  '2013-10-01 15:32:45'
AND activities.date <=  '2013-11-30 15:32:45'
) AS steps
FROM  `user_challenge` 
INNER JOIN  `users` ON  `user_challenge`.`user_id` =  `users`.`id` 
INNER JOIN  `teams` ON  `user_challenge`.`team_id` =  `teams`.`id` 
WHERE  `user_challenge`.`challenge_id` =2
AND  `user_challenge`.`team_id` IS NOT NULL 
GROUP BY  `user_challenge`.`team_id`

PHP(Laravel)が役立つ場合:

$subquery = "(SELECT SUM(activities.$type) FROM activities WHERE activities.user_id = users.id AND activities.created_at <= '". $challenge->end_date ."' AND activities.date >= '". $challenge->start_date ."' AND activities.date <= '". $challenge->end_date ."') as $type";
$teams = DB::table('user_challenge')
    ->where('user_challenge.challenge_id', $challenge->id)
    ->whereNotNull('user_challenge.team_id')
    ->join('users','user_challenge.user_id','=','users.id')
    ->join('teams','user_challenge.team_id','=','teams.id')
    ->select('user_challenge.team_id', 'teams.name',DB::raw($subquery))
    ->groupBy('user_challenge.team_id')
    ->get();

GROUP BY を使用した出力:

team_id, name, steps
1, Team 1, null

GROUP BY なしの出力:

team_id, name, steps
1, Team 1, null
1, Team 1, 13000
1, Team 1, 10000

望ましい出力:

team_id, name, steps
1, Team 1, 23000

テーブル

4

1 に答える 1