2017-10-09 74 views
3

說,我的基於時間的數據集,其包含數據的一個這樣的數組:組由和用PHP /口才/ MySQL的嵌套數組

{ 
    "group": "a", "date": "2017/01/01", value: 0.01 
}, 
{ 
    "group": "a", "date": "2017/01/02", value: 0.02 
} 

如何可以產生這樣設置的結果:

{ 
    "group": "a", value_sum: 0.03, timeline: [["2017/01/01", 0.01], ["2017/01/02", 0.02]] 
} 

等等。

我用雄辯的ORM,我現在堅持一個模式,我做兩個不同的查詢,第一個拿到的總和爲每個不同的組:

SELECT group, sum(value) FROM table GROUP BY group 

,第二個到得到的趨勢:

SELECT group, date, sum(value) FROM table GROUP BY group, date 

然後我合併在php中設置的兩個結果。

我正在尋找一種方式來獲得在一個查詢所有結果

回答

1

,你可以嘗試用做一個彙總GROUP BY

SELECT 
    `group`, date, sum(value) 
FROM table 
GROUP BY 
    `group`, date 
WITH ROLLUP 

在Laravel:

DB::table('table') 
    ->select('`group`', 'date', DB::raw('sum(value) as sumval')) 
    ->groupBy(DB::raw('`group`, date WITH ROLLUP')) 
    ->get(); 

你可以查看MySQL documentation以查看如何通過彙總工作。對於當前查詢結構,彙總會爲每個group的值的小計生成額外的行。另外,結果集的底部會有一行總計。雖然你可以使用也可以通過兩個單獨的查詢實現同樣的事情,但是你可能會發現讓MySQL爲你付出沉重的代價更容易。畢竟,它是爲了這個目的而創建的。

另一個注意事項:請勿爲您的列命名group,因爲這是一個保留的MySQL關鍵字。另外,不要命名錶table。也許你只是用這些名字作爲佔位符,但如果沒有,你將不得不在任何地方逃脫它們。

+0

是的,使用WITH ROLLUP讓我省去一個sql查詢。 謝謝。 –