首页 > 解决方案 > Leftjoin with groupby 跳过 groupby

问题描述

我有一些用户,我想通过左加入锻炼表来计算用户,并为每个用户获取一行。因此,仅在锻炼表中出现过一次或更多但我只需要每个 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

标签: mysqllaravel

解决方案


将 groupby 移到连接闭包之外。

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

推荐阅读