如何获取计数在Laravel连接查询

问题描述 投票:0回答:2

我想下面的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。

更新: - 数据库表

Brand Table User activities

php mysql laravel laravel-5.7
2个回答
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();

0
投票

您可以使用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();
© www.soinside.com 2019 - 2024. All rights reserved.