与groupby的Leftjoin跳过groupby

时间:2019-06-28 09:10:48

标签: mysql laravel

我有一些用户想通过离开联接表进行锻炼并为每个用户获得一行。因此,仅在锻炼表中出现过一次或更多次的用户,但每个user_id仅需要一行。

这可以通过在原始sql查询中使用in来实现,但尝试在laravel中对其进行格式化,则不会:

$users->leftJoin('workout', function($join){
  $join->on('user.id', '=', 'workout.user_id')
  ->where('workout.user_id', '>', 1)
  ->groupBy('workout.user_id');
})

这是一个可用作原始查询的查询:

select * from `users` 
left join (select workout.user_id, workout.id_holofit from workout where workout.user_id > 1  group by workout.user_id) workout ON workout.user_id = users.id

1 个答案:

答案 0 :(得分:1)

将groupby移动到联接关闭位置之外。

$users->leftJoin('workout', function ($join) {
    $join->on('user.id', '=', 'workout.user_id')
    ->where('workout.user_id', '>', 1);
})
->groupBy('workout.user_id')