Php 来自两个不同表的Laravel 5.4查询生成器SUM()

Php 来自两个不同表的Laravel 5.4查询生成器SUM(),php,mysql,laravel,Php,Mysql,Laravel,我在从两个表中获取某个字段的和时遇到问题 首先,我的问题是 //Getting of Cost of Goods Sold (Menus) $totalMenuCost = DB::raw('(SUM(orders.qty * orders.cost)) as cost'); $yearMenuSold = DB::raw('YEAR(orders.created_at) as year'); $menuscost = DB::

我在从两个表中获取某个字段的和时遇到问题

首先,我的问题是

        //Getting of Cost of Goods Sold (Menus)
        $totalMenuCost = DB::raw('(SUM(orders.qty * orders.cost)) as cost');
        $yearMenuSold = DB::raw('YEAR(orders.created_at) as year');

        $menuscost =  DB::table('orders')
            ->where('status', 'served')
            ->select($totalMenuCost, $yearMenuSold);

        //Getting of Cost of Goods Sold (Items)
        $totalItemCost = DB::raw('(SUM(purchases.qty * purchases.cost)) as cost');
        $yearItemSold = DB::raw('YEAR(purchases.created_at) as year');

        $itemcost =  DB::table('purchases')
            ->where('status', 'served')
            ->union($menuscost)
            ->select($totalItemCost, $yearItemSold)
            ->get();
当我尝试执行
返回$itemcost
时。它返回两行:

[
  {
    cost: "792.00",
    year: 2017
  },

  {
    cost: "1700.00",
    year: 2017
  }
]
我试图让它返回一行,但添加了它,如下所示:

[
  {
    cost: "2492.00", // that's 1,700 + 792
    year: 2017
  }
]
在您的示例中,您只是从其他表($menuscost)中选择$totalItemCost、$YearItemSeld和union

因此,这不会增加结果

///////////尝试用此格式更改查询

select column1,sum(column2) total
from
(
    select column1,column2
    from Table1
    union all
    select column1,column2
    from Table2
) t
group by column1
希望这有帮助。。
如果需要更多帮助,请告诉我。

一切似乎都很好,您是否像这样更改了
$itemcost

$itemcost =  DB::table('purchases')
             ->where('status', 'served')
             ->select($totalItemCost, $yearItemSold)
             ->union($menuscost)
             ->groupBy('year')
             ->get();
更新

由于上述情况不适用于您的案例

我认为分组讨论的问题是和工会有关的,所以请对此进行新的尝试

$menuscost =  DB::table('orders')
        ->where('status', 'served')
        ->select($totalMenuCost, $yearMenuSold)
        ->groupBy('year');

$itemcost =  DB::table('purchases')
             ->where('status', 'served')
             ->select($totalItemCost, $yearItemSold)
             ->groupBy('year')
             ->union($menuscost)
             ->groupBy('year')
             ->get();

如果这不起作用,那么您可以添加此查询的输出。

您的union应该在
->get()之前。
,尝试使用group by aswell@SagarGautam我切换了
选择
联合
。因此,
union
将位于
->get()
之前,并在
union
之前添加
->groupBy('cost')
。但是它有相同的输出。是的,根据您的需求使用
->groupBy()
,在这里您可以按年份分组以获得您的output@SagarGautam我也尝试过使用
->groupBy('year')
。仍然显示相同的输出,呵呵。在$itemCost中,您可以再次按年度计算成本列和组的总和。这也是我的想法,嗯。因此我可以使用
select()
方法添加它们?我尝试了这个方法,正如您之前所说的那样。。。但是输出仍然是一样的,没有任何变化。xD@JanArielSanJose相同的输出?它仍然返回两组数据。当groupBy位于
union()
method的上方或下方时,仍然会使用两组数据进行相同的输出。除息的。我开始觉得我的
DB::raw
查询有问题了。@JanArielSanJose-ha-ha似乎有一些严重的问题:D:D
$menuscost =  DB::table('orders')
        ->where('status', 'served')
        ->select($totalMenuCost, $yearMenuSold)
        ->groupBy('year');

$itemcost =  DB::table('purchases')
             ->where('status', 'served')
             ->select($totalItemCost, $yearItemSold)
             ->groupBy('year')
             ->union($menuscost)
             ->groupBy('year')
             ->get();