2016-05-06 5 views
1

Ich bekomme Probleme mit der Analyse der Ausgabe von MySQL-Abfrage, um Highcharts zu füttern. Das größte Problem ist, dass ich mehr als 100 Datenreihen hawe, und ich möchte nicht zu jedem Spaltennamen in der Parsing-Prozess, jetzt die gewünschte Ausgabe so etwas wäre beziehen tun:Analysieren der MySQL-Ausgabe zu JSON Extrahieren von Feldnamen

[ 
{'name':'TS','data':[4349,4375]} 
{'name':'time1','data':[503,573]} 
{'name':'time2','data':[500,506]} 
{'name':'time3','data':[508,649]} 
] 

Aber ich sind mit diesem Ausgang steckt, in dem alle Daten in der nur die ersten Array gedruckt:

[ 
{'name':'TS','data':[4349,503,573,500,4375,506,508,649,]} 
{'name':'time1','data':[]} 
{'name':'time2','data':[]} 
{'name':'time3','data':[]} 
] 

der PHP-Code, den ich verwende ist die folgende:

<?php 
    try { 
    $con= new PDO('mysql:host=localhost;dbname=test', "root", ""); 
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $query = "SELECT TIME_TO_SEC(TS) as TS, TIME_TO_SEC(time1) as time1, TIME_TO_SEC(time2) as time2, TIME_TO_SEC(time3) as time3 FROM time ORDER BY TS"; 
    //first pass just gets the column names 
    print "["; 
    $result = $con->query($query); 
    //return only the first row (we only need field names) 
    $row = $result->fetch(PDO::FETCH_ASSOC); 
     //second query gets the data 
    $data = $con->query($query); 
    $data->setFetchMode(PDO::FETCH_ASSOC); 

    foreach ($row as $field => $value){ 
     print "{'name':'$field','data':["; 
     foreach($data as $row){ 
      foreach ($row as $name=>$value){ 
       print " $value,"; 
      } 
     } 
    print "]}"; 
    } 
    print "]"; 
} 
catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 
?> 

irgendein Vorschlag, wie zur löse das Problem?

+0

Sie verwenden '$ row' innerhalb der' foreach', die darüber iteriert – Ahmad

+0

Und wie kann ich durch die Spalten iterieren? Da der FETCH_ASSOC nur auf die Zeilen – drypatrick

Antwort

1

Sieht so aus, als ob Sie mehrere Male $row verwenden, wodurch die Schleifen Fehler verursachen. Benennen Sie Ihre innere Variable $row in etwas anderes um, z. $innerData.

foreach ($row as $field => $value){ 
     print "{'name':'$field','data':["; 
     foreach($data as $innerData){ 
      foreach ($innerData as $name=>$innerValue){ 
       print " $innerValue,"; 
      } 
     } 
    print "]}"; 
    } 

Aber es scheint mehr Probleme in Ihrem Code zu geben. Sie fragen die Datenbank zweimal mit $ query ab. Sie würden 2 gleiche Ergebnissätze erhalten. Haben Sie die zweite Abfrageanweisung nicht eingefügt?

Bitte fügen Sie die Ergebnisse ein, die die Abfragen in mysql ohne PHP erzeugen. So kann ich meine Antwort verbessern oder andere können Ihnen auch helfen.

+0

verweist, erhalte ich immer noch das gleiche Ergebnis wie zuvor. – drypatrick

+0

Es war nur beabsichtigt, die mysql-Ausgabe einer anderen Variablen zuzuordnen. – drypatrick