Mysql
 sql >> Database >  >> RDS >> Mysql

come lavorare con dati dinamici e grafici di Google?

La tua domanda tocca qualcosa che mi ha molto frustrato:la documentazione dell'API di Google non è eccezionale! In particolare, per l'API Charts, praticamente in tutti i loro esempi, i dati per il loro grafico sono codificati nella pagina e, nella vita reale, in pratica eseguirai sempre il rendering dei dati archiviati in un DB e trasmessi al browser.

1) Hai bisogno di un codice sul server (io uso PHP) che interroghi il database, "stampi" e trasmetta la struttura dati JSON/complessa che è un oggetto in cui le proprietà sono array che contengono oggetti aggiuntivi con proprietà e valori nell'esatto formato che JavaScript Chart di Google si aspetta di ricevere nel browser. L'ho fatto così:

$sql = "SELECT year,d_pop FROM metrics WHERE year IN ('1940','1950','1960','1970','1980')";

$sth = mysql_query($sql, $conn) or die(mysql_error());

//start the json data in the format Google Chart js/API expects to recieve it
$JSONdata = "{
           \"cols\": [
               {\"label\":\"Year\",\"type\":\"string\"},
               {\"label\":\"Detroit Population\",\"type\":\"number\"}
             ],
        \"rows\": [";

//loop through the db query result set and put into the chart cell values
while($r = mysql_fetch_assoc($sth)) {
   $JSONdata .= "{\"c\":[{\"v\": " . $r['year'] . "}, {\"v\": " . $r['d_pop']  ."}]},";

}    

//end the json data/object literal with the correct syntax
$JSONdata .= "]}";

echo $JSONdata;

2) Devi ricevere quell'oggetto JSON nel tuo JavaScript sulla tua pagina e passarlo a Chart JS di Google. Ho portato JQuery e poi ho usato il suo metodo AJAX in questo modo:

function drawChart() {
    var jsonData = $.ajax({
        url: "index_db.php",
        dataType:"json",
        async: false
    }).responseText;

    // Create our data table out of JSON data loaded from server.
    var data = new google.visualization.DataTable(jsonData);

    // Instantiate and draw our chart, passing in some options.
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, {vAxis: {minValue: 0}});
}

I miei frammenti di codice si concentrano sulle parti chiave dell'interrogazione del database MySQL, della generazione dell'oggetto JSON di cui l'API di Google Charts ha bisogno e della ricezione con JQuery e AJAX. Spero che questo illumini!