多组数据 Laravel
Posted
技术标签:
【中文标题】多组数据 Laravel【英文标题】:Multiple Group By Data Laravel 【发布时间】:2022-01-16 17:56:02 【问题描述】:我有这个数据
ID | Name | Year |
---|---|---|
1 | Test1 | 2020 |
2 | Test1 | 2021 |
3 | Test2 | 2020 |
4 | Test2 | 2020 |
5 | Test2 | 2021 |
6 | Test3 | 2020 |
我的查询是这样的
SELECT name, year, count(*) as count FROM table GROUPBY name, year
输出将是
name | Year | Count |
---|---|---|
test 1 | 2020 | 1 |
test 2 | 2020 | 2 |
test 2 | 2021 | 1 |
test 3 | 2020 | 1 |
如何在 php 或 laravel 中进行这样的输出
name => test1,
year => 2020,
count => 1
,
year => 2021,
count => 1
,
name => test2,
year => 2020,
count => 2
,
year => 2021,
count => 1
,
name => test3,
year => 2020,
count => 1
,
【问题讨论】:
到目前为止您尝试了什么?请注意,mysql 不是关于呈现数据,而是关于选择它。你的数据形状/结构是 PHP 可以处理的。 当我使用按年分组时,我尝试使用 foreach 数据输出,但显示了一些数据。 不清楚所需的输出应该是什么样子。目前,它看起来像是带有一些 PHP 关联数组元素的格式错误的 JSON。你能改为共享格式正确的 PHP 数组或 JSON 输出吗? 【参考方案1】:从数据库中获取分组结果后,您可以在Collection
中应用groupBy
并应用格式
$query = DB::table('yourtable')
->select([
'name',
'year',
DB::raw('count(*) as count'),
])
->groupBy(['name','year'])
->get()
->groupBy('name')
->map(function($yearlyCollection)
return $yearlyCollection
->map(function($eachData)
return Arr::except((array)$eachData,'name');
);
)
->map(function($value,$key)
return [
'name' => $key,
'yearData' => $value->toArray(),
];
)
->values()
->toArray();
会产生这样的输出
[
[
"name" => "Test1",
"yearData" => [
[
"year" => 2020,
"count" => 1,
],
[
"year" => 2021,
"count" => 1,
],
],
],
[
"name" => "Test2",
"yearData" => [
[
"year" => 2020,
"count" => 2,
],
[
"year" => 2021,
"count" => 1,
],
],
],
[
"name" => "Test3",
"yearData" => [
[
"year" => 2020,
"count" => 1,
],
],
],
]
【讨论】:
【参考方案2】:这可能并不完美,但这样的事情就足够了:
Data::select("year",DB::raw("count(id) as count"))
->groupBy('Name')
->get();
【讨论】:
我的查询的输出已经很好,但渲染不是我想要的以上是关于多组数据 Laravel的主要内容,如果未能解决你的问题,请参考以下文章
c语言中怎样输入多组数据 每组数据个数不确定 每组数据占一行
EXCEL如何将多组数据画在一张图上,图例成分组效果(见附图)