Mysql sql不在使用查询生成器laravel的组中
Mysql sql不在使用查询生成器laravel的组中,mysql,laravel,Mysql,Laravel,我想根据投票表中的product_id获取多少数据量。在laravel上,这个查询运行得不好,但当我在mysql中尝试时,我运行得很好,还有其他解决方案吗 这是通过mysql成功执行的查询: select count(product_id) as total, `v`.*, `p`.`name` from `votes` as `v` left join `products` as `p` on `p`.`id` = (select p1.id from products as p1 where
我想根据投票表中的product_id获取多少数据量。在laravel上,这个查询运行得不好,但当我在mysql中尝试时,我运行得很好,还有其他解决方案吗 这是通过mysql成功执行的查询:
select count(product_id) as total, `v`.*, `p`.`name` from `votes` as `v` left join `products` as `p` on `p`.`id` = (select p1.id from products as p1 where v.product_id = p1.id ) group by v.product_id
结果:
这是我使用查询生成器对laravel进行的查询:
$count = DB::table('votes as v')->leftJoin('products as p',function($join){
$join->on('p.id','=',DB::raw('(select p1.id from products as p1 where v.product_id = p1.id )'));
})->select(DB::raw('count(*) as total'),'v.*','p.name')->groupBy('v.product_id')->get();
dd($count);
我得到了这个错误:
SQLSTATE[42000]:语法错误或访问冲突:1055
“lookbubbledrink.v.id”不在SQL分组中:选择“计数为”
总计,v.,p.投票中的名称为v左加入产品为
p.id上的p=从产品中选择p1.id作为p1,其中v.product\U id
=p1.id按v.product\U id分组
我只需要使用group by product_id来根据投票中product_id的数量计算数据量 您在laravel中使用的是严格模式。到目前为止,您可以根据自己的需要进行调整 进入set strict=>false中的config/database.php,就可以开始了
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
MySQL较新版本中的配置通过MySQL唯一允许的方式禁用部分组。在这种配置中,所选的所有非聚合字段必须包含在group by子句中。由于您选择的是v.*您需要在group by.on laravel中包含v中的每个字段。此查询不太有效,但当我在mysql中尝试时,我在mysql中运行良好,但在mysql上运行良好,您的查询也不会正常运行。您的查询将生成错误的结果。Laraval很可能为php mysql客户端设置了唯一的“完整的”\u group by sql\u模式活动是否存在其他问题如何生成此类数据@uuerdouse一个已传递的表子查询,以按product_id进行计数和分组,并以唯一可能的方式将结果集和其他数据进行内部联接。在这样的查询中包含v.*甚至并没有多大意义;*在众多可能具有相同产品id的产品中,从哪个v行开始?