Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Conteggio risposte

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360

    Conteggio risposte

    Salve ragazzi!

    stò preparando uno script per la compilazione di un sondaggio online,

    Mettiamo che abbia 3 domande con risposta “Si” e “No”, vorrei poter interrogare il DB e contare quanti Si e No sono stati espressi per la domanda 1, poi per la domanda 2 ed infine per la domanda 3.

    Io al momento lavorando solo per recuperare il conteggio del Si della risposta 1 ho questa parte di codice:

    Codice PHP:
    // esecuzione query
    $query  "SELECT risposta_01, count(*) as 'Si' FROM questionario GROUP BY risposta_01";
    $result mysql_query($query) or die (mysql_error());


      
    // ciclo tutti i record recuperati attraverso la nostra query
      
    while ($row=mysql_fetch_array($result)){
        
    $risposta_01 stripslashes($row['risposta_01']);
        } 
    e stampo poi con
    Codice PHP:
    <?php echo $risposta_01 ?>
    solo che non ottengo ciò che speravo, mi stampa a video “Si” anziché il numero. Forse sbaglio ragionamento?
    Ultima modifica di harry80; 01-03-2014 a 23:33

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,469
    $query = "SELECT risposta_01, count(*) as 'Si' FROM questionario GROUP BY risposta_01";

    Perché non provi ad eseguire questa query direttamente a mano sul DB (con phpmyadmin per esempio) per vedere cosa restituisce?
    Restituisce ciò che ti aspetti? Secondo me no, ma verificalo.

    while ($row=mysql_fetch_array($result) {
    $risposta_01 = stripslashes($row['risposta_01']);
    }

    A cosa serve questo while?
    Sovrascrive continuamente la variabile $risposta_01, alla fine avrai solo l'ultimo valore del ciclo, tutti gli altri vanno persi dato che non è un array.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360
    Ho provato la query su phpMyAdmin e mi sembra OK, mi restituisce 2 colonne
    risposta_01,Si
    No,3
    Si,1

    il conteggio è OK, solo non capisco perché compare la colonna Si.

    Il problema è stampare i risultati, ho tolto il while ma va in pagina bianca! Sicuramente è una procedura diversa da come ho recuperato i dati dal DB fino ad ora.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,469
    Gliel'hai chiesta tu
    SELECT risposta_01, count(*) as 'Si' FROM questionario GROUP BY risposta_01

    Secondo me tu volevi fare una cosa così

    Codice PHP:
    $query "SELECT risposta_01, COUNT(*) AS numero FROM questionario GROUP BY risposta_01";

    $result mysql_query($query);

    while (
    $row mysql_fetch_assoc($result))
    {
        echo 
    $row['risposta_01'].' -> '.$row['numero'].'<br />';


  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360
    Grande, grazie!

    Allora mi sono accorto che mi stampa i risultati sia del Si e del No, mi servono separati perché il valore lo voglio utilizzare per cerare una barra per creare un grafico, barra "Si" più lunga se risposte "Si" maggiori del "No".

    Ho provato

    Codice PHP:
    $query  "SELECT risposta_01, COUNT(*) AS numero FROM questionario GROUP BY risposta_01 LIMIT 0,1"
    Codice PHP:
    $query  "SELECT risposta_01, COUNT(*) AS numero FROM questionario GROUP BY risposta_01 LIMIT 1,1"
    ma dovrei fare una vagonata di query in base alle domande e alle risposte

    3 domande con 2 risposte entrambi = 6 query!
    Ultima modifica di harry80; 02-03-2014 a 11:05

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,469
    No, non va bene il limit, non hai garanzie che prima troverai sempre i si e poi i no per ogni risposta.
    Basta che aggiungi un
    WHERE risposta_01='Sì' per prendere i si
    WHERE risposta_01='No' per prendere i no

    Pensi che 6 query siano una vagonata?

    Altrimenti se vuoi continuare con la query che prende entrambi:
    Codice PHP:
    //sai che ritornerà sicuramente 2 record, uno per i si e uno per i no
    $row1 mysql_fetch_assoc($result); //carica la prima riga
    $row2 mysql_fetch_assoc($result); //carica la seconda riga

    if ( $row1['risposta_01'] == 'Si' //sono i si
    {
        
    //fai quello che devi fare con il numero di si
        //il numero di si è $row1['numero']
    }
    else 
    //sono i no
    {
        
    //fai quello che devi fare con in no
        //il numero di no è $row1['numero']
    }

    //devi ripeetere la stessa cosa, stavolta per $row2
    if ( $row2['risposta_01'] == 'Si' //sono i si
    {
        
    //fai quello che devi fare con il numero di si
        //il numero di si è $row2['numero']
    }
    else 
    //sono i no
    {
        
    //fai quello che devi fare con in no
        //il numero di no è $row2['numero']


  7. #7
    Tranquillo 6 query non sono una vagonata. Ci sono cms che per generare una pagina ne fanno 10 o 20.. o più..
    L'ultima risposta di Alhazred è una soluzione valida.
    Harry80 ti devi documentare sugli array. Facendo un po' di pratica puoi trattare tutte le tue risposte con un ciclo while solo se le operazioni da eseguire sono uguali per ogni risposta. Concettualmente una cosa del tipo:
    Codice PHP:
    while ($row mysql_fetch_assoc($result))
    {
    //Inserisci qui un indice incrementale se ti serve per chiamare 'risposta_01', 'risposta_02'..

        
    if ( $row1['risposta_01'] == 'Si' //sono i si
    {
        
    //fai quello che devi fare con il numero di si
        //il numero di si è $row1['numero']
    }
    else 
    //sono i no
    {
        
    //fai quello che devi fare con in no
        //il numero di no è $row1['numero']
    }


  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360
    Ho messo in atto il tuo suggerimento Alhazred.

    Mi farò carico di creare tante query quante sono le domande, all'inizio ho detto che erano 3 perché mi piace partire con pochi elementi nella programmazione e poi espandermi, ma in realtà sono una 30ina!

    quindi
    Codice PHP:
    $query_01  "SELECT risposta_01, COUNT(*) AS numero FROM questionario GROUP BY risposta_01 ORDER BY numero DESC";
    $result_01 mysql_query($query_01); 
    Codice PHP:
    //sai che ritornerà sicuramente 2 record, uno per i si e uno per i no
    $row1 mysql_fetch_assoc($result_01); //carica la prima riga
    $row2 mysql_fetch_assoc($result_01); //carica la seconda riga

    if ( $row1['risposta_01'] == 'Si' //sono i si
    {
        
    //fai quello che devi fare con il numero di si
        //il numero di si è $row1['numero']
        
    echo $row1['risposta_01'] . '<br />' '<img src="immagini/barra_verde.png" width="' $row1['numero']*10 '" height="16" /> ' $row1['numero'] . '<br /><br />';
    }
    else 
    //sono i no
    {
        
    //fai quello che devi fare con in no
        //il numero di no è $row1['numero']
        
    echo $row1['risposta_01'] . '<br />' '<img src="immagini/barra_verde.png" width="' $row1['numero']*10 '" height="16" /> ' $row1['numero'] . '<br /><br />';
    }

    //devi ripeetere la stessa cosa, stavolta per $row2
    if ( $row2['risposta_01'] == 'Si' //sono i si
    {
        
    //fai quello che devi fare con il numero di si
        //il numero di si è $row2['numero']
        
    echo $row2['risposta_01'] . '<br />' '<img src="immagini/barra_rossa.png" width="' $row2['numero']*10 '" height="16" /> ' $row2['numero'] . '<br /><br />';
    }
    else 
    //sono i no
    {
        
    //fai quello che devi fare con in no
        //il numero di no è $row2['numero']
        
    echo $row2['risposta_01'] . '<br />' '<img src="immagini/barra_rossa.png" width="' $row2['numero']*10 '" height="16" /> ' $row2['numero'] . '<br /><br />';

    tenendo conto che alcune domande hanno anche 5 risposte e non di solo Si o No, ma proprio risposte estese, pensate che possa applicare questa tecnica oppure vale solo con 2
    risposte possibili?

    Mi devo inventare qualche cosa anche per la lunghezza delle barre, non vorrei che con l'aumento delle risposte mi spagini tutto con una barra orizzontale supergigante!

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,469
    Come è fatta la tabella questionario?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360
    id,nome,cognome,risposta_01,risposta_02 ecc

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 © 2024 vBulletin Solutions, Inc. All rights reserved.