2013-03-13 2 views
6

Ho un database in MySQL che desidero visualizzare in D3.JS. Per fare ciò, prima voglio i dati parse nel formato JSON, quindi scrivere un codice base che estrae i dati dal database e visualizzarli con D3.JS. Mi guardo intorno ma non riesco a trovare quello che voglio da quando sono nuovo a D3.JS.Come estrarre dati dal database mysql e visualizzare con D3.JS?

Come posso ottenere quello? Qualsiasi aiuto o suggerimento è apprezzato.

risposta

1

AFAIK non ci sono librerie che consentono a javascript di connettersi direttamente a un database MySQL. Considera invece di esporre i tuoi dati tramite un servizio web (utilizzando un numero qualsiasi di tecnologie lato server: ASP.Net, PHP, Ruby on Rails ecc.) E serializza i tuoi dati su JSON nella risposta

+0

Che cosa mi suggerisce di iniziare? – BaRd

+2

Se nessuno di questi ha senso, potresti voler esportare i tuoi dati manualmente da MySQL come .csv (qualcosa come phpmysqladmin ha questa opzione, o puoi farlo sulla riga di comando) e poi caricare direttamente .csv in D3, che ha un strumento di caricamento CSV. (Oppure se esporti usando le schede come delimitatore, usa l'importazione "tsv" D3.) Non è dinamico, ma ci si alza e si avvia molto più velocemente del tornare indietro per apprendere un quadro completamente nuovo. –

+1

@ChrisWilson Non ho accesso diretto al database e lo userò in visualizzazione in tempo reale. – BaRd

4

Risposta breve: Servizio Web.

In sostanza, si desidera creare un servizio Web che restituisca i dati di JSON (ad esempio) per la connessione alle chiamate d3.json().

Si consiglia di utilizzare Python per eseguire rapidamente l'estensione di SimpleHTTPServer o utilizzare un framework di servizi Web come web2py.

9

Quello che segue è uno script php che dovresti essere in grado di salvare da qualche parte come file (diciamo che lo chiami "getdata.php") accessibile dal tuo file HTML con il tuo codice D3. Quando chiamato, restituirà i dati dal tuo database MySQL in un formato json (a condizione che il server del database non sia esterno al tuo dominio);

<?php 
    $username = "******"; 
    $password = "******"; 
    $host = "******"; 
    $database="***dbase_name***"; 

    $server = mysql_connect($host, $user, $password); 
    $connection = mysql_select_db($database, $server); 

    $myquery = " 
    query here 
    "; 

    $query = mysql_query($myquery); 

    if (! $query) { 
     echo mysql_error(); 
     die; 
    } 

    $data = array(); 

    for ($x = 0; $x < mysql_num_rows($query); $x++) { 
     $data[] = mysql_fetch_assoc($query); 
    } 

    echo json_encode($data);  

    mysql_close($server); 
?> 

Ovviamente è necessario inserire i dettagli appropriati per nome utente, password, host e database. Dovresti anche includere una query appropriata per i tuoi dati in modo che restituisca quello che stavi cercando. Qualcosa sulla falsariga di (e questa è solo una supposizione);

SELECT `dateTimeTaken`, `reading` FROM `tablename` 

Il che restituisce un elenco di francobolli e valori di tempo da una tabella chiamata tablename con colonne chiamato dateTimeTaken e reading. Quindi quando vai a leggere nel tuo file JSON userai la seguente sintassi per il codice in cui verrebbe letto nel tuo json;

d3.json("getdata.php", function(error, data) { 

Speriamo che sia vicino a quello che stai cercando. L'ho provato localmente e tutto sembra funzionare ..

Ho messo insieme un post per esaminare l'installazione locale di un semplice server WAMP e impostare una query sul database MySQL da d3.js qui http://www.d3noob.org/2013/02/using-mysql-database-as-source-of-data.html

Questo è più o meno la stessa situazione di Accessing MySQL database in d3 visualization

1

ho affrontato problema io stesso con json_encode, alla fine ho scritto il mio proprio codice al posto di json_encode. Devi solo impostare le informazioni di connessione sql e yoru. Spero che tu lo trovi utile

$conn = new mysqli(DB_Host, DB_User, DB_Password, DB_Name) or die("Connection failed: " . $conn->connect_error); 
$sql = "select AID as id, deDate_Value as date, nterTime AS counter 
     from xxxx"; 

//Get the Date and store it in array 
$records = array(); 
if ($result=mysqli_query($conn,$sql)) 
    while ($obj=mysqli_fetch_object($result)) 
     $records[] = $obj; 

//echo in json format on screen  
echo "["; 
$comma_1 = ""; 
foreach($records as $obj) 
{ 
    echo $comma_1."{"; 
    $comma_2 = ""; 
    foreach($obj as $key => $value) 
    { 
     echo $comma_2.'"'.$key."\": \"". $value . "\""; 
     $comma_2 = ", "; 
    } 
    echo "}"; 
    $comma_1 = ", \n"; 
}