将联合与laravel结合使用时如何获得两个不同表的总和
Posted
技术标签:
【中文标题】将联合与laravel结合使用时如何获得两个不同表的总和【英文标题】:How to get sum of two different table when using union with laravel 【发布时间】:2021-07-07 09:47:36 【问题描述】:我的代码是这样的
$docManual = DB::table('document_manuals')
->whereYear('document_manuals.created_at', $monthYear)
->whereMonth('document_manuals.created_at', '=', $monthly)
->select('document_manuals.format_type', DB::raw('count(*) as total'))
->groupBy('document_manuals.format_type');
$format = DB::table('documents')
->whereYear('documents.created_at', $monthYear)
->whereMonth('documents.created_at', '=', $monthly)
->select('.documents.format_type', DB::raw('count(*) as total'))
->groupBy('documents.format_type')
->unionAll($docManual)
->get();
输出
Illuminate\Support\Collection #1676 ▼
#items: array:4 [▼
0 => #1679 ▼
+"format_type": "pdf"
+"total": 1
1 => #1682 ▼
+"format_type": "ppt"
+"total": 1
2 => #1678 ▼
+"format_type": "doc"
+"total": 1
3 => #1684 ▼
+"format_type": "pdf"
+"total": 2
]
我想让输出看起来像这样
Illuminate\Support\Collection #1676 ▼
#items: array:4 [▼
0 => #1679 ▼
+"format_type": "pdf"
+"total": 3
1 => #1682 ▼
+"format_type": "ppt"
+"total": 1
2 => #1678 ▼
+"format_type": "doc"
+"total": 1
]
问题是如何使用 UNION 将项目与两个表组合和求和?为了更清楚,我有两个表,数据是:
first table : document_manuals
pdf : 1
second table : documents
pdf : 2
ppt : 1
doc : 1
所以有人知道如何组合它们以使输出看起来像我想要的吗?
【问题讨论】:
【参考方案1】:
$data = collect([
['format_type' => 'pdf', 'total' => 1],
['format_type' => 'ppt', 'total' => 1],
['format_type' => 'doc', 'total' => 1],
['format_type' => 'pdf', 'total' => 2],
]);
$result = collect([]);
$data->groupBy('format_type')->map(function ($item, $key) use ($result)
$result->push((object)['format_type' => $key, 'total' => $item->sum('total')]);
);
dd($result->toArray());
【讨论】:
以上是关于将联合与laravel结合使用时如何获得两个不同表的总和的主要内容,如果未能解决你的问题,请参考以下文章
将源自不同表的两个 postgresql tsvector 字段连接到单个 postgresql 视图中,以启用联合全文搜索
mysql 千万级数据库如何进行多张结构相同的表联合查询?如何优化或设置提高查询速度?