2017-08-08 70 views
2

我在從兩個表中獲取某個字段的SUM時出現問題。Laravel 5.4來自兩個不同表的查詢生成器SUM()

因此,要開始的東西,這是我的查詢。

 //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(); 

而且當我試着做return $itemcost。它返回兩行:

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

    { 
    cost: "1700.00", 
    year: 2017 
    } 
] 

我試圖讓它返回一行而擁有它補充說,像這樣:

[ 
    { 
    cost: "2492.00", // that's 1,700 + 792 
    year: 2017 
    } 
] 
+0

你的工會應該在' - > get()'之前,嘗試使用group by –

+0

@SagarGautam我切換了'select'和'union'。所以'union'就在' - > get()'之前,並且在'union'之前加上' - > groupBy('cost')'。但它有相同的輸出。 –

+0

是的,根據你的要求使用' - > groupBy()',在這裏你可以按年分組來獲得你的輸出 –

回答

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

在你的榜樣,你只是選擇$ totalItemCost ,$ yearItemSold和其他表($ menuscost)的聯合。

這樣就不會加起來的結果。

///////////試着改變你的查詢以這種格式

select column1,sum(column2) total 
from 
(
    select column1,column2 
    from Table1 
    union all 
    select column1,column2 
    from Table2 
) t 
group by column1 

希望這有助於.. 讓我知道,如果需要更多的幫助。

+0

這就是我的想法,嗯。所以我可以用'select()'方法添加它們? –

0

一切似乎不錯,你有沒有改變你的$itemcost這樣

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

UPDATE

由於上面沒有你的情況下工作,

我覺得組問題,通過與工會所以請試試這個。

$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(); 

如果這不起作用,那麼您可以添加此查詢的輸出。

+0

我試過這個,就像你之前說的那樣......但是輸出仍然是一樣的,沒有任何變化。 xD –

+0

@JanArielSanJose相同的輸出? –

+0

它仍然返回兩組數據。無論groupBy高於還是低於union()方法 –