Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Aiuto MySQL - PHP

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    5

    Aiuto MySQL - PHP

    Salve ragazzi, avrei bisogno del vostro aituo.

    Sto sviluppando un sito web assieme a dei colleghi che si interfacci con un DB MySQL e che mostri i risultatati delle query su questo DB in grafici.

    Sto provando a costruire una API che mi estragga i dati dal DB in JSON per poi portarli in una libreria di charting (Chart.js, Google Chart, d3.js)

    Non essendo un esperto di PHP sto trovando non poche difficoltà.

    Questo è quello che sono riuscito a fare fino ad ora, sapreste dirmi se è esatto o meno ?
    I miei dubbi sono soprattutto relativi a come far funzionare il ciclo while.



    Codice PHP:

    <?php

    require("../include/db_config.php"); //include i file di configurazione del database


    $data = array(); \\Dichiaro la variabile che conterrà i risultati della query

    \\La query che applicherò sul DB per estrarre i dati

    $vquery 
    mysqli_query($dbmysqli"SELECT DISTINCT (Diagnosi_Principale), Descrizione FROM DIAGNOSI JOIN CODICI_DIAGNOSI ON Diagnosi_Principale=CODICI_DIAGNOSI.Codice_DiagnosiWHERE Diagnosi_Principale=( SELECT Diagnosi_Principale 
          FROM DIAGNOSI
          GROUP BY Diagnosi_Principale                           
          HAVING COUNT(Diagnosi_Principale)>=all(SELECT COUNT(Diagnosi_Principale)as conteggi                                                                                FROM DIAGNOSI
                                                                       GROUP BY Diagnosi_Principale))"
    );

    \\
    Inserisco i risultati della query nella variabile PHP creata in precedenza

    while($tumori=mysqli_fetch_assoc($vquery))    {      
           
    $data[CodTumoreDiffuso] = $tumori["Diagnosi_Principale"];     
           
    $data[DescrTumoreDiffuso] = $tumori["Descrizione"];    }

    echo 
    json_encode($data); \\Restisuisco i risultati in formato JSON

    ?>

    Vi chiedo inoltre, se possibile, in che modo dovrei poi portarmi tali dati in JSON nella libreria php?

    Vi ringrazio in anticipo per l'aiuto.
    Ultima modifica di Crios; 27-05-2016 a 22:02

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    Fossi in te prima costruirei l'array contenente ciò che vuoi e con la struttura da te scelta, ed infine userei json_encode() sull'array finito.
    Così come stai facendo tu sovrascrivi continuamente le variabili $data[CodTumoreDiffuso] e $data[DescrTumoreDiffuso] e ti troverai in fondo solo l'ultimo valore estratto dal DB
    Ultima modifica di brodik; 27-05-2016 a 23:32
    eXvision

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    5
    Quote Originariamente inviata da brodik Visualizza il messaggio
    Fossi in te prima costruirei l'array contenente ciò che vuoi e con la struttura da te scelta, ed infine userei json_encode() sull'array finito.
    Così come stai facendo tu sovrascrivi continuamente le variabili $data[CodTumoreDiffuso] e $data[DescrTumoreDiffuso] e ti troverai in fondo solo l'ultimo valore estratto dal DB
    E come potrei fare?

    Effettivamente hai ragione, sovrascrive ogni volta
    Ultima modifica di Crios; 28-05-2016 a 05:48

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    5
    Mi sono messo un po al lavoro e sono arrivato a questo risultato. Dovrebbe funzionare giusto ?

    Codice PHP:
    <?php


    require("../include/db_config.php"); //include i file di configurazione del database


    //La query che applicherò sul DB per estrarre i dati
    $sql "SELECT DISTINCT (Diagnosi_Principale), Descrizione
    FROM DIAGNOSI JOIN CODICI_DIAGNOSI ON Diagnosi_Principale=CODICI_DIAGNOSI.Codice_Diagnosi
    WHERE Diagnosi_Principale=( SELECT Diagnosi_Principale
                               FROM DIAGNOSI
                               GROUP BY Diagnosi_Principale
                               HAVING COUNT(Diagnosi_Principale)>=all(SELECT COUNT(Diagnosi_Principale)as conteggi
                                                                     FROM DIAGNOSI
                                                                     GROUP BY Diagnosi_Principale))"
    ;


    $result $conn->query($sql);  //Conservo i risultati della query


    $jsonArray = array(); //Dichiaro la variabile che conterrà i risultati della query


    //Controllo se la query ha dato risultati
    if ($result->num_rows 0) {
      
    //Converto i risultati in un array associativo
      
    while($row $result->fetch_assoc()) {
        
    $jsonArrayItem = array();
        
    $jsonArrayItem['Diagnosi_Principale'] = $row['Diagnosi'];
        
    $jsonArrayItem['Descrizione'] = $row['Descrizione'];
        
    //Aggiungo i valori trovati nell'array principale
        
    array_push($jsonArray$jsonArrayItem);
      }
    }




    echo 
    json_encode($jsonArray); //Restisuisco i risultati in formato JSON


    ?>


    Il punto ora è : come passo tali valori alla libreria Charts.js ? Ho bisogno di ajax oppure mi è superfluo ?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    5
    Nessuno?

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Puoi fare sia con che senza ajax. Con ajax puoi lasciare il codice com'è, poi nel html dovresti fare una cosa del genere (almeno da quel che ho capito da chart.js)

    codice:
      <script>
            $(window).load(function () {
            var ctx = document.getElementById('canvas');
            $.ajax({  
                        type: 'GET',
                        dataType: 'json',
                        url: 'url_del_tuo_file_php.php',
                        success: function(response){
                             if(response){
                                    var labels = [];
                                    var data = [];
                                    // Prendi la risposta JSON e la dividi in label e i dati
                                    $.each(response, function(index, value){
                                       labels.push(value.Descrizione); 
                                        // Sono questi i tuoi valori da graficare ?
                                       data.push(value.Diagnosi_Principale); 
                                    });
                                    var chart = new Chart(ctx, {
                                       type: 'bar',
                                       data: {
                                        labels: labels,
                                        datasets: [{
                                           data: data
                                        }]
                                    }
                                    });
                              }
                        },
                        error: function(xhr, ajaxOptions, thrownError){
                               alert(thrownError);
                        },
                     });
           });
        </script>
    Altrimenti, al posto di farti restituire un json, puoi scrivere direttamente i dati per chart.js:

    Codice PHP:
    <?php 
    ....
    $labels = array();
    $data = array();
    if (
    $result->num_rows 0) {
      
    //Converto i risultati in un array associativo
      
    while($row $result->fetch_assoc()) {
        
    $data[] = $row['Diagnosi'];
        
    $labels[] = $row['Descrizione'];
      }
    }
    header('Content-Type: application/javascript');
    ?>

    var labels = ["<?php echo implode('","'$labels?>"];
    var data = [<?php echo implode(','$data?>];
    Poi l'html diventa

    codice:
    <script src="url_al_tuo_file_php.php"></script>
    $(window).load(function () {
            var ctx = document.getElementById('canvas');
            var chart = new Chart(ctx, {
                      type: 'bar',
                      data: {
                             labels: labels,  // data e labels sono presi dal tuo file php incluso come javascript
                             datasets: [{
                                 data: data
                             }]
                      }
            });
    }
    PS: Ho usato jQuery, inoltre prendilo con le pinze...ci potrebbero essere errori. E cmq forse è più un argomento da javascript
    Ultima modifica di boots; 28-05-2016 a 19:54

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    5
    Ti ringrazio tantissimo per l'aiuto. Seguirò la prima strada usando ajax.

    potresti indicarmi una pagina HTML tipo completa dove includi la chiamata ajax ? In particolare mi servirebbe capire come richiami la libreria chart.js e come si utilizzano i canvas

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Questo è il codice che ho provato...ovviamente vediti bene la libreria chart.js, visto che è laprima volta che ne sento parlare

    codice:
    <html>
    <head>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <!-- credo che dovresti scaricarti lo script dal sito -->
        <script src="https://raw.githubusercontent.com/nnnick/Chart.js/v2.0-dev/dist/Chart.js"></script>
        <script>
            $(window).load(function () {
            var ctx = document.getElementById('canvas');
            $.ajax({
      
                        type: 'GET',
                        dataType: 'json',
                        url: 'test.php',
                        success: function(response){
                             if(response){
                                    var labels = [];
                                    var data = [];
                                    $.each(response, function(index, value){
                                       labels.push(value.label);
                                       data.push(value.data);
                                    });
                                    var chart = new Chart(ctx, {
                                       type: 'bar',
                                       data: {
                                        labels: labels,
                                        datasets: [{
                                        data: data
                                      }]
                                    }
                                    });
                                   
                               }
                              
                            
                        },
                        error: function(xhr, ajaxOptions, thrownError){                     
                               alert(thrownError);
                        },
                        complete: function(){
              
                        }
    
                     });
    
            
            });
        </script>
    </head>
    <body>
    <canvas id="canvas" width="400" height="400"></canvas>
    </body>
    </html>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.