多组数据 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语言中怎样输入多组数据 每组数据个数不确定 每组数据占一行

多组数据 Laravel

EXCEL如何将多组数据画在一张图上,图例成分组效果(见附图)

c语言中,一次连续输入多组数据,并且最后连续输出多组结果,应该用哪种方法

1136: 零起点学算法43——多组测试数据输出I

C语言,输入多组数据,每行两个,然后对应每行一个输出结果