代码之家  ›  专栏  ›  技术社区  ›  Praveen Kumar Krupa Suthar

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

  •  0
  • Praveen Kumar Krupa Suthar  · 技术社区  · 6 年前

    我想将下面的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”不在分组依据中(SQL:select brands.*,brands.brand\u name,brands.id,count(user\u activities.action\u type)作为user\u activities count from user_activities 左连接 brands 品牌 . id = . brand_id 分组 . )

    我试着设置 'strict' => true database.php 但是我在Laravel 5.7中得到了同样的错误。

    更新:-数据库表

    Brand Table User activities

    2 回复  |  直到 6 年前
        1
  •  4
  •   Mozammil    6 年前

    如果我正确理解了您的问题,那么您正在尝试查找按品牌名称分组的用户活动数。此外,您还希望按用户活动最多的记录排序前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();
    
        2
  •  0
  •   Shirantha Madusanka    6 年前

    你可以用拉威尔的口才。我假设品牌和用户活动之间的关系是一对多的,在这里,“品牌”是品牌实体的模型。

    $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();