php - 如何在 Laravel 中的联接查询中获取计数
问题描述
我想将以下 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) as user_activitiesCount from
user_activities
left joinbrands
onbrands
.id
=user_activities
.brand_id
group byuser_activities
.brand_id
)
我试图设置'strict' => true
,database.php
但我在 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();
推荐阅读
- sql - 为什么在数据库中收集统计数据称为资源消耗活动?
- flutter - 如何指定测试窗口?
- jquery - 如何将 bootstrap-colorpicker 附加到我的 laravel/blade 页面?
- css - 响应性- 如何使用 CSS 控制 PC 显示的比例和布局?
- swift - 快速为倒计时计时器制作一个重置按钮
- javascript - 打印时 PDF 不完整
- ios - 自定义 UITableViewCell 中的 TableView 未针对该自定义 cellviewtype 的所有单元格出现
- javascript - 解决 karma 中源文件的依赖关系解析
- kotlin - 如何模拟调用 kotlin.system.exitProcess
- reactjs - 强制 React 在一些视觉上重要的状态变化上快速重新渲染