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

Php 如何在Laravel中获取联接查询中的计数,php,mysql,laravel,laravel-5.7,Php,Mysql,Laravel,Laravel 5.7,我想将下面的SQL转换为Laravel 选择COUNT('uc.*)作为倒计时,bs.brand\u name 来自uc的“用户活动” 在uc.brand_id=bs.id上以bs的身份加入品牌 按uc.brand_id分组 按倒计时说明订购 限制5 但在这样做时: $top\u donwload\u list=DB::table('user\u activities')) ->leftJoin('brands'、'brands.id'、'='、'user\u activities.brand

我想将下面的SQL转换为Laravel

选择COUNT('uc.*)作为倒计时,bs.brand\u name
来自uc的“用户活动”
在uc.brand_id=bs.id上以bs的身份加入品牌
按uc.brand_id分组
按倒计时说明订购
限制5
但在这样做时:

$top\u donwload\u list=DB::table('user\u activities'))
->leftJoin('brands'、'brands.id'、'='、'user\u activities.brand\u id')
->选择raw('brands.*,brands.brand\u name,brands.id,count(用户\u活动.操作\u类型)作为用户\u活动计数')
->groupBy('user\u activities.brand\u id')
->get();
我得到这个错误:

SQLSTATE[42000]:语法错误或访问冲突:1055“colorworld.brands.id”不在分组依据中(SQL:select brands.*,brands.brand\u name,brands.id,count(user\u activities.action\u type)as用户活动从
user\u activities
left加入
brands
on
brands
id
=
user\u activities
brand\u id
用户活动分组

我试图在
database.php
中设置
'strict'=>true
,但在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();

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

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

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

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

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

是的,你说得对。但此查询不起作用,出现错误“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请检查与您的MariaDB服务器版本相对应的手册,以了解将“*)附近的语法用作用户活动从第1行的
user\u activities
internal join
brands
on
brands(SQL:select brands.name,COUNT(user\u activities.*))中的用户活动计数作为用户活动计数从
user\u activities`internal join
brands
on
brands
id
user\u activities
id
group by
brands
name
order by
user\u activities count
desc limit 5)“将您的answare“brand.name”更新为“brand.brand\u name”是,你说得对。但此查询不起作用,出现错误“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请检查与您的MariaDB服务器版本相对应的手册,以了解将“*)附近的语法用作用户活动从第1行的
user\u activities
internal join
brands
on
brands(SQL:select brands.name,COUNT(user\u activities.*))中的用户活动计数作为用户活动计数从
user\u activities`internal join
brands
on
brands
id
user\u activities
id
group by
brands
name
order by
user\u activities count
desc limit 5)“将您的answare“brand.name”更新为“brand.brand\u name”请添加正确答案。请添加正确答案。