如何在Laravel中的联接查询中获得计数

时间:2019-01-31 15:09:04

标签: php mysql laravel laravel-5.7

我想将以下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左加入brandsbrands = iduser_activitiesbrand_id分组。{{1 }})

我尝试在user_activities中设置brand_id,但在Laravel 5.7中遇到相同的错误。

更新:-数据库表

Brand Table User activities

2 个答案:

答案 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