2012-09-08 3 views
0

하이 차트를 사용하여 basic column chart을 만들어야합니다.올바른 데이터 형식을 SQL에서 PHP로 전달하는 방법

$query = "SELECT campaign_id, kpi, label, val FROM table WHERE id = $1"; 

$result = pg_prepare($db, "report", $query); 
$result = pg_execute($db, "report", array($campaignID)); 

while ($row = pg_fetch_array($result, NULL, PGSQL_ASSOC)) 
{ 
    $response['xlabels'][] = $row['label']; 
    $response['xdata'][] = (float)$row['val']; 
} 

pg_free_result($result); 
pg_close($db); 

echo json_encode($response); 

PostgreSQL의 쿼리 반환 데이터를 다음과 같이 (CAMPAIGN_ID = 5, 예를 들어) : 여기 내 PHP 코드의

id | kpi | label | val 
----+-----------+-------+------ 
    5 | Voter  | East | 0.18 
    5 | Non-Voter | East | 0.12 
    5 | Voter  | West | 0.82 
    5 | Non-Voter | West | 0.88 

내 API는 저장 xlabelsxdataxAxis.categoriesseries :

$.get('vote_api.php', {'id' : id}, function(data) { 

    options.chart.type = 'column'; 

    options.xAxis.categories = data.xlabels; 
    options.series = data.xdata; 

    chart = new Highcharts.Chart(options); 

    }, "json"); 

kpi (Voter vs. Non-Voter)에 대한 올바른 데이터 형식은 내 시리즈이며,내 x 축이 될 (JSFiddle 참조)한다로 (서부 대 동부) :

[xlabels] => Array 
    (
     [0] => East 
     [1] => East 
     [2] => West 
     [3] => West 
    ) 

[xdata] => Array 
    (
     [0] => 0.18 
     [1] => 0.12 
     [2] => 0.82 
     [3] => 0.88 
    ) 

것은 어떤 하나의 방법 몇 가지 힌트를 줄 것이다 :

xAxis.categories = ['East', 'West']; 
series = [{name: 'Voter', 
      data: [0.18, 0.82]}, 
      {name: 'Non-Voter', 
      data: [0.12, 0.88]}] 

그러나 내 while loop 부분 $response['xlabels'][] = $row['label']; $response['xdata'][] = (float)$row['val']; 나에게 이런 식으로 뭔가를 줄 이것을하기 위해? 나는 정말로 그것을 바르게 평가할 것이다!!

+0

왜 downvote ??? – Rock

답변

1

당신은 시도 할 수 있습니다 :

$query = "SELECT campaign_id, kpi, label, val FROM table WHERE id = $1"; 

$result = pg_prepare($db, "report", $query); 
$result = pg_execute($db, "report", array($campaignID)); 

while ($row = pg_fetch_array($result, NULL, PGSQL_ASSOC)) 
{ 
    if (!in_array($row['label'], $response['xlabels'])) 
    { 
     $response['xlabels'][] = $row['label']; 
    } 
    $response['xdata'][ $row['kpi'] ][] = (float)$row['val']; 
} 

pg_free_result($result); 
pg_close($db); 

첫 번째 변화 :

if (!in_array($row['label'], $response['xlabels'])) 
    { 
     $response['xlabels'][] = $row['label']; 
    } 

는 "동"과 "서쪽의"xlabels 배열에 여러 번 저장 방지 할 수 있습니다.

제 2 변화 :

$response['xdata'][ $row['kpi'] ][] = (float)$row['val']; 

가 XDATA 배열 차원을 추가 할 것이다 : 값들은 "KPI"에 따라 다른 배열에 할당된다.

+0

고마워 Alain. 이것은 크게 도움이됩니다. 고맙습니다! – Rock

+0

죄송합니다 Alain, 나는 여전히 올바른 형식을 디버깅하려고합니다. '배열 ( [0] => 배열 ( [이름] => 유권자 [데이터] => 배열 \t \t ( \t \t \t 0.18, 0.82 : 나는 내가 정말 필요로하는 것은 같은 몇 가지 생각 \t \t) ) [1] => 배열 ( [이름] => 비 유권자 [데이터] => 배열 \t \t ( \t \t,223,210 0.12 0.88 \t \t) ) ) '이므로 JSON가로 인코딩 할 수있는'{상품명 : "투표자"데이터 : [0.18, 0.82]} {상품명 : "비 유권자'데이터 : [0.12, 0.88]}. 나는 당신의 코드를 사용하고 있지만'name'과'data'를 지정하지 않습니다. 이걸 도울 수 있니? 감사! – Rock

+1

다른 코드 뒤에 이것을 더한다 : '$ final = array(); foreach ($ name => $ data로 $ 응답) { \t $ elem = new stdClass(); \t $ elem-> name = $ name; \t $ elem-> data = $ data; \t $ final [] = $ elem; } ' –

관련 문제