Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360

    Query corretta ma visualizzazione incongruente

    Salve!

    Succede una cosa stranissima,

    se nel DB c’è "Sì" come ultima risposta, mi vengono mostrati i risultati con le percentuali, sia dei "Sì" che dei "No", se invece l’ultima risposta nel DB è il "No", i totali e le percentuali sono a zero. Per quale motivo?

    Ecco il codice che utilizzo:

    Codice PHP:
    <?php
    $query_risposta_01  
    "SELECT risposta_01, COUNT(*) AS numero FROM questionario WHERE risposta_01 != '' GROUP BY risposta_01 ORDER BY numero DESC";
    $result_risposta_01 mysql_query($query_risposta_01);

    $query_numero_votanti_risposta_01  "SELECT risposta_01, COUNT(*) FROM questionario WHERE risposta_01 != ''";
    $result_numero_votanti_risposta_01 mysql_query($query_numero_votanti_risposta_01);
    ?>
    Codice PHP:
    <?php
    $row1 
    mysql_fetch_assoc($result_risposta_01);
    $row2 mysql_fetch_assoc($result_risposta_01);
    $numero_votanti_risposta_01 mysql_fetch_row($result_numero_votanti_risposta_01);

    if ( 
    $row1['risposta_01'] == 'Sì' ) {
        echo 
    $row1['risposta_01'] . '<br />' '<img src="../immagini/barra_verde.png" width="' round($row1['numero'] * 80 $numero_votanti_risposta_01[1], 0) . '%" height="16" /> ' $row1['numero'] . ' (' round($row1['numero'] * 100 $numero_votanti_risposta_01[1], 0) . '% di voti)<br /><br />';
    } else {
        echo 
    'Sì<br />' '0 (0 % di voti)' '<br /><br />';
    }

    if ( 
    $row2['risposta_01'] == 'No' ) {
        echo 
    $row2['risposta_01'] . '<br />' '<img src="../immagini/barra_rossa.png" width="' round($row2['numero'] * 80 $numero_votanti_risposta_01[1], 0) . '%" height="16" /> ' $row2['numero'] . ' (' round($row2['numero'] * 100 $numero_votanti_risposta_01[1], 0) . '% di voti)<br /><br />';
    } else {
        echo 
    'No<br />' '0 (0% di voti)' '<br /><br />';
    }
    ?>

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Credo dipenda se ci sono più 'no' che 'si'. Sei i no > si $row1['risponsta_01'] = 'No' (hai messo order by numero) di conseguenza gli if sono entrambi falsi

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360
    E quindi che soluzione dovrei applicare secondo te, come dovrei correggere il codice?

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    io farei così (se hai solo si e no come risposte):
    Codice PHP:
    $voti = array('Si'=>0'No'=>0);
    while(
    $row=mysql_fetch_assoc($result_risposta_01)){
         
    $voti[$row['risposta_01']] = $row['numero'];
    }

    if(
    $voti['Si'] > 0){
       echo  
    'Si<br />' '<img src="../immagini/barra_verde.png" width="' round($voti['Si'] * 80 $numero_votanti_risposta_01[1], 0) . '%" height="16" /> ' $voti['Si'] . ' (' round($voti['Si'] * 100 $numero_votanti_risposta_01[1], 0) . '% di voti)<br /><br />';
    }else{
         echo 
    'Sì<br />' '0 (0 % di voti)' '<br /><br />';
    }

    if(
    $voti['No'] > 0){
       ...
    }else{
         echo 
    'No<br />' '0 (0 % di voti)' '<br /><br />';


  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360
    Scusami tanto... ho omesso di dire che ho anche domande con più risposte e non solo "Sì" e "No"...

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Domanda: ma nella query hai anche risposte senza voto? nel senso se nessuno vota per si, non hai nessuna riga o hai numero = 0 ?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360
    Nel caso Sì e No che ho postato, risposta obbligatoria quindi o valore Sì o valore No.

    Ci sono però anche domande con 3 risposte, non obbligatorie, in quel caso se non si risponde nel DB rimane vuoto il campo ed infatti nella somma totale dei voti, con WHERE risposta_01 != '', non faccio conteggiare i campi vuoti.

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Me se tutti rispondono NO...hai lo stesso una riga per i SI (numero = 0) ?
    In caso contraio, puoi fare così:
    Codice PHP:
    /* Le risposte o le metti manualmente, oppure le riprendi dal db se le memorizzi li
    Le chiavi sono le risposte
    */
    $risposte = array('Si' => true'No' => true'Forse'=>true, ...);
    while(
    $row=mysql_fetch_assoc($result_risposta_01)){
         echo  
    $row['risposta_01']'.
         <br />' 
    '<img src="../immagini/barra_verde.png" width="' round($row['numero'] * 80 $numero_votanti_risposta_01[1], 0) . '%" height="16" /> ' 
         
    $voti['Si'] . ' (' round($row['numero'] * 100 $numero_votanti_risposta_01[1], 0) . '% di voti)<br /><br />';
         
    // Togliamo dall'array la risposta appena stamapata
         
    unset($risposte[$row['risposta_01']]);
    }
    // Stampiamo le risposte non date
    foreach($risposte as $risposta){
         echo 
    $risposta.'<br />' '0 (0 % di voti)' '<br /><br />';


  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    360
    boots, il tuo esempio mi va in pagina bianca.

    Comunque con SELECT risposta_01, COUNT(*) AS numero FROM questionario WHERE risposta_01 != '' GROUP BY risposta_01 ORDER BY numero DESC,

    mi compare
    risposta_01, numero
    No,2
    Sì,1
    dove quei 2 e 1 sono i rispettivi No e Sì coteggiati in maniera corretta, ecco che quindi volevo applicare quel row1 e row2.

  10. #10
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Probabilmente ho fatto qualche errore ...abilita gli errori e vedi cosa ho sbagliato (a parte l'array $risposte non vedo altri problemi)
    Al limite riposta il codice

    Ho capito quello che volevi fare...solo che se fai order by numero su $row1/$row2 ci possono essere sia SI che NO (dipende da chi è più grande)

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.