我想将以下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,count(user_activities.action_type)作为user_activitiesCount,从{{1}的
user_activities
左加入brands
。brands
=id
。user_activities
由brand_id
分组。{{1 }})
我尝试在user_activities
中设置brand_id
,但在Laravel 5.7中遇到相同的错误。
更新:-数据库表
答案 0 :(得分:1)
如果我正确理解了您的问题,则表示您正在尝试按品牌名称分组进行用户活动计数。您还希望按用户活动最多的顺序排列前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();
答案 1 :(得分:0)
可以使用Laravel口才。我假设brand和user_activities之间的关系是一对多的,在这里,“ Brand”是品牌实体的模型。
Children