2017-06-01 20 views
1

我被Stucked嘗試「合併日期數組」以將數據顯示到Google Column圖表中。我想按年/月分組列出問題及其成本。這是我的數據在日期合併數組以顯示Google圖表

array 
    0 => 
    array 
     'date' => string '2017-03' 
     'source' => string 'Problem 1' 
     'cost' => float 135 
    1 => 
    array 
     'date' => string '2017-03' 
     'source' => string 'Problem 2' 
     'cost' => float 385 
    2 => 
    array 
     'date' => string '2017-04' 
     'source' => string 'Problem 3' 
     'cost' => float 3500 
    3 => 
    array 
     'date' => string '2017-04' 
     'source' => string 'Problem 1' 
     'cost' => float 4437.5 
    4 => 
    array 
     'date' => string '2017-04' 
     'source' => string 'Problem 2' 
     'cost' => float 318 

如果所需的輸出將https://jsfiddle.net/9d1fzsaf/1/

如果有被MySQL GROUPBY日期和問題源中的數據,也許我應該優化查詢?

SELECT DATE_FORMAT(creation_date,'%Y-%m') AS date, 
       (CASE 
         WHEN source_problem = '0' THEN 'Empty' 
         WHEN source_problem = '1' THEN 'Problem 1' 
         WHEN source_problem = '2' THEN 'Problem 2' 
         WHEN source_problem = '3' THEN 'Problem 3' 
         ELSE 'Others' 
       END) AS source, 
          SUM(aprox_cost) AS cost 
         FROM table 
         WHERE source_problem IS NOT NULL 
         GROUP BY DATE_FORMAT(creation_date,'%Y-%m'), 
           source_problem 

任何幫助將不勝感激! 謝謝

+0

重新組合您的數據,同時從查詢獲取記錄。 –

+0

謝謝你的回答,這正是我想要做的 $ req-> execute(); '$ results = $ req-> fetchAll(); foreach($ results as $ result){ $ data [] = array('date'=> $ result ['date'],'source'=> $ result ['source'],'cost'=>(浮動)$結果[ '成本']); \t} 我不知道如何按日期對數據進行重新組合 – kretinus

回答

0

以產生在貼小提琴圖表,
每個source_problem將需要一個單獨的列

建議在sql分離列...

SELECT 
    DATE_FORMAT(creation_date,'%Y-%m') AS Month, 
    SUM(CASE 
    WHEN source_problem = '0' 
    THEN aprox_cost 
    ELSE 0 
    END) AS Empty, 
    SUM(CASE 
    WHEN source_problem = '1' 
    THEN aprox_cost 
    ELSE 0 
    END) AS Problem1, 
    SUM(CASE 
    WHEN source_problem = '2' 
    THEN aprox_cost 
    ELSE 0 
    END) AS Problem2, 
    SUM(CASE 
    WHEN source_problem = '3' 
    THEN aprox_cost 
    ELSE 0 
    END) AS Problem3, 
    SUM(CASE 
    WHEN source_problem <> '0' AND source_problem <> '1' AND source_problem <> '2' AND source_problem <> '3' 
    THEN aprox_cost 
    ELSE 0 
    END) AS Others 
FROM 
    table 
WHERE 
    source_problem IS NOT NULL 
GROUP BY 
    DATE_FORMAT(creation_date,'%Y-%m') 

也使用JSON數據時,它需要在this format
以創建數據TABL Ë直接...

var data = new google.visualization.DataTable(jsonData); 

因爲如此,建立類似於下面的結果...

$data = array(); 

$data['cols'] = array(
    array('label' => 'Month', 'type' => 'string') 
    array('label' => 'Empty', 'type' => 'number') 
    array('label' => 'Problem 1', 'type' => 'number') 
    array('label' => 'Problem 2', 'type' => 'number') 
    array('label' => 'Problem 3', 'type' => 'number') 
    array('label' => 'Others', 'type' => 'number') 
); 
$data['rows'] = array(); 

foreach ($results as $result) { 
    $row = array(
    array('v' => (string) $result['Month']) 
    array('v' => (float) $result['Empty']) 
    array('v' => (float) $result['Problem1']) 
    array('v' => (float) $result['Problem2']) 
    array('v' => (float) $result['Problem3']) 
    array('v' => (float) $result['Others']) 
); 
    $data['rows'][] = array('c' => $row); 
} 

echo json_encode($data); 
+0

謝謝你,這工作正常! – kretinus

+0

歡呼!很高興提供幫助,請您將答案標記爲已接受? – WhiteHat

0

我已經修改了你的mysql查詢。請使用此代碼

SELECT DATE_FORMAT(creation_date,'%Y-%m') AS date, 
        (CASE 
          WHEN source_problem = '0' THEN 'Empty' 
          WHEN source_problem = '1' THEN 'Problem 1' 
          WHEN source_problem = '2' THEN 'Problem 2' 
          WHEN source_problem = '3' THEN 'Problem 3' 
          ELSE 'Others' 
        END) AS source, 
           SUM(aprox_cost) AS cost 
          FROM table 
          HAVING source_problem IS NOT NULL 
          GROUP BY date; 
+0

感謝您的幫助,但此查詢出錯 '#1055 - SELECT列表的表達式#2不在GROUP BY子句中,並且包含nonaggregated列' – kretinus

+0

我已修改腳本..你能檢查請。 –

+0

仍然同樣的錯誤,實際上查詢工作我的結果看起來像 '日期 - source_problem - 成本 2017-3 - 問題1 - 100' 我的問題是更多如何使谷歌圖表消耗數據 – kretinus