将联合与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结合使用时如何获得两个不同表的总和的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL两个表如何通过关联合并

MySQL数据库联合查询与连接查询

将源自不同表的两个 postgresql tsvector 字段连接到单个 postgresql 视图中,以启用联合全文搜索

mysql 千万级数据库如何进行多张结构相同的表联合查询?如何优化或设置提高查询速度?

MySql如何将LEFT JOIN查询与NOT IN查询结合起来

如何将 IN 运算符与 LIKE 条件相结合(或获得可比较结果的最佳方法)