2015-10-06 86 views
1

我正在運行一個查詢,該查詢將一些需要轉換爲JavaScript數組以便使用Google Graph的數據返回。將MySQL結果轉換爲Google圖表的JavaScript數組

下面是該查詢:

SELECT 
sub.supplier_name, 
(
    SELECT ROUND(AVG(sp.progress), 2) as P1 
    FROM `sub_performancemeasures` AS sp 
    INNER JOIN `submissions` AS sub ON sub.id = sp.sub_id 
    WHERE `period` = '1' 
) AS p1, 
(
    SELECT ROUND(AVG(sp.progress), 2) as P2 
    FROM `sub_performancemeasures` AS sp 
    INNER JOIN `submissions` AS sub ON sub.id = sp.sub_id 
    WHERE `period` = '2' 
) AS p2, 
(
    SELECT ROUND(AVG(sp.progress), 2) as P3 
    FROM `sub_performancemeasures` AS sp 
    INNER JOIN `submissions` AS sub ON sub.id = sp.sub_id 
    WHERE `period` = '3' 
) AS p3, 
(
    SELECT ROUND(AVG(sp.progress), 2) as P4 
    FROM `sub_performancemeasures` AS sp 
    INNER JOIN `submissions` AS sub ON sub.id = sp.sub_id 
    WHERE `period` = '4' 
) AS p4, 
(
    SELECT ROUND(AVG(sp.progress), 2) as P5 
    FROM `sub_performancemeasures` AS sp 
    INNER JOIN `submissions` AS sub ON sub.id = sp.sub_id 
    WHERE `period` = '5' 
) AS p5 
FROM `submissions` AS sub 
INNER JOIN `sub_performancemeasures` AS sp ON sub.id = sp.sub_id 
INNER JOIN `performance_measures` AS pm ON sp.pm_id = pm.id 
INNER JOIN `kpis` ON kpis.id = pm.kpi_id 
GROUP BY sub.supplier_name 

,該查詢產生以下數組:

Array ( 
    [0] => Array ( 
      [sub] => Array ( 
          [supplier_name] => C Spencer Ltd 
         ) 
      [0] => Array ( 
          [p1] => -11.43 
          [p2] => 36.67 
          [p3] => 
          [p4] => 
          [p5] => 
         ) 
       ) 
    [1] => Array ( 
      [sub] => Array ( 
          [supplier_name] => Supplier 2 
         ) 
      [0] => Array ( 
          [p1] => 15.21 
          [p2] => -6.44 
          [p3] => 
          [p4] => 65.41 
          [p5] => 
         ) 
       ) 
    ) 

然後我需要借這個查詢,並將其轉換,以適應下面的JavaScript數組:

[ 
    ['Period', 'Allen', 'Tom', 'Sim'], 
    [1, null, null, -100], 
    [2, 3, null, null], 
    [3, 3, null, null], 
    [4, null, 2, null], 
    [5, 3, 100, null], 
] 

當前字符串中的數據是示例數據。我需要的陣列看起來像這樣:

[ 
    ['Period', 'C Spencer Ltd', 'Supplier 2'], 
    [1, -11.43, 15.21], 
    [2, 36.67, -6.44], 
    [3, null, null], 
    [4, null, 65.41], 
    [5, null, null], 
] 

這是我到目前爲止已經試過:

$str1="[['Period',"; 
foreach($avgSupScores as $supplier){ 

    $str1 .= "'".$supplier['sub']['supplier_name']."', "; 
    //$str2 .= "1, ".$periods[0]['p1'].""; 
} 
$str1 = rtrim($str1, ", "); 

$str1 .= "],["; 



echo $str1; 

這導致:

[['Period','C Spencer Ltd', 'Supplier 2'],[ 

第一行是確定的,但我不確定該從哪裏出發去獲得我需要的東西,我也不確定這是否是正確/最好的方法。

+1

您是否嘗試自行轉換它? – Epodax

+0

我做了,但我沒有得到任何地方。我試圖用foreach循環來連接字符串 – jampez77

+1

告訴我們你已經嘗試了什麼,並得到了什麼錯誤(編輯你的問題,不要將它包含在註釋中) – Epodax

回答

2

使用下面的代碼它會幫助你。你必須分開鍵和值,然後合併。

<?php 
$con=mysql_connect("localhost","Uname","pwd") or die("Failed to connect with database!"); 
mysql_select_db("db", $con); 

$fields = mysql_query("SELECT * FROM chart_data"); 

while($r = mysql_fetch_assoc($fields)) { 
$arr2=array_keys($r); 
$arr1=array_values($r); 

} 

for($i=0;$i<count($arr1);$i++) 
{ 
    $chartData[$i]=array((string)$arr2[$i],intval($arr1[$i])); 
} 
echo "<pre>"; 
$data=json_encode($chartData); //pass this $data in the google graph 
?> 
+0

謝謝。這正是我需要的:) – jampez77