我有这个Eloquent查询:
return DB::table('users')
->leftJoin('bet', function($join) use ($competition_id){
$join->on('users.id', '=', 'bet.user_id');
$join->on('bet.competition_id','=', DB::raw("$competition_id"));
})
->select('users.*', DB::raw('SUM(points) as score'))->get();
它给我一个错误:
SQLSTATE [42000]:语法错误或访问冲突:1140如果没有GROUP BY子句,则GROUP GROUP列(MIN(),MAX(),COUNT(),...)的混合没有GROUP列是非法的( SQL:选择users
。*,SUM(点数)作为users
左侧加入bet
的分数users
。id
= {{1} }。bet
和user_id
。bet
= 1 )
如果我只是在PhpMyAdmin中复制粘贴生成的SQL(以粗体显示),它可以完美地运行......
你能帮我解决一下这个问题吗?因为这对我没有意义......
谢谢
解
问题只是缺少的群体:
competition_id
解决方案#2
根据MySQL的版本或配置,上面的解决方案不起作用,我必须按照Eric的建议将所有字段分组:
return DB::table('users')
->leftJoin('bet', function($join) use ($competition_id){
$join->on('users.id', '=', 'bet.user_id');
$join->on('bet.competition_id','=', DB::raw("$competition_id"));
})
->select('users.*', DB::raw('SUM(points) as score'))->groupBy('users.id')->get();
答案 0 :(得分:2)
我有很多问题,但4.是它的原因
group by
或禁用严格模式试试这个:
return DB::table('users')
->leftJoin('bet', function($join) use ($competition_id){
$join->on('users.id', '=', 'bet.user_id');
$join->on('bet.competition_id','=', DB::raw("$competition_id"));
})
->select('users.*', DB::raw('SUM(points) as score'))->groupBy('users.id')->get();