我想下面的SQL转换为Laravel。
SELECT COUNT('uc.*') AS count_down, bs.brand_name
FROM `user_activities` AS uc
JOIN brands AS bs ON uc.brand_id = bs.id
GROUP BY uc.brand_id
ORDER BY count_down DESC
LIMIT 5
但是,当这样做:
$top_donwload_list = DB::table('user_activities')
->leftJoin('brands', 'brands.id', '=', 'user_activities.brand_id')
->selectRaw('brands.*, brands.brand_name, brands.id, count(user_activities.action_type) as user_activitiesCount')
->groupBy('user_activities.brand_id')
->get();
我得到这个错误:
SQLSTATE [42000]:语法错误或访问冲突:1055 'colorworld.brands.id' 是不是在GROUP BY(SQL:选择品牌*,brands.brand_name,brands.id,从数(user_activities.action_type)作为user_activitiesCount
user_activities
留在brands
.brands
加入id
=由user_activities
.brand_id
user_activities
.brand_id
基团)
我试图设置'strict' => true
,在database.php
但我得到了同样的错误在Laravel 5.7。
更新: - 数据库表
如果我理解正确你的问题,你正在努力寻找一个品牌的名称分组用户活动的次数。你也想的前5名的记录与用户最活动的人订购。
因此,下面应该工作:
$top_donwload_list = DB::table('user_activities')
->selectRaw("brands.brand_name, COUNT('user_activities.*') as user_activitiesCount")
->join('brands', 'brands.id', '=', 'user_activities.brand_id')
->groupBy('brands.brand_name')
->orderBy('user_activitiesCount', 'desc')
->take(5)
->get();
您可以使用Laravel侃侃而谈。我认为品牌和user_activities之间的关系是一对多和在这里,“品牌”是品牌的实体模型。
$count = Brand::leftJoin
('user_activities', function($join_brands){
$join_brands-> on
('brands.id', '=','user_activity.brand_id');
)->orderBy('user_activities.count_down','desc ')
->groupBy('user_activities.brand_id')->count();