我有這個資料
| ID | 名稱 | 年 |
|---|---|---|
| 1 | 測驗1 | 2020年 |
| 2 | 測驗1 | 2021年 |
| 3 | 測驗2 | 2020年 |
| 4 | 測驗2 | 2020年 |
| 5 | 測驗2 | 2021年 |
| 6 | 測驗3 | 2020年 |
我的查詢是這樣的
SELECT name, year, count(*) as count FROM table GROUPBY name, year
輸出將是
| 名稱 | 年 | 數數 |
|---|---|---|
| 測驗 1 | 2020年 | 1 |
| 測驗 2 | 2020年 | 2 |
| 測驗 2 | 2021年 | 1 |
| 測驗 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
}
},
}
uj5u.com熱心網友回復:
正從資料庫分組結果后,你可以申請groupBy在 Collection和應用的格式
$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,
],
],
],
]
uj5u.com熱心網友回復:
這可能并不完美,但這樣的事情應該足夠了:
Data::select("year",DB::raw("count(id) as count"))
->groupBy('Name')
->get();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380518.html
