Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727

    MYSQL: da una select COUNT alla percentuale...

    Grazie all'aiuto di alcuni forumisti, ieri sera ho sistemato questa funzione di un questionario-->

    <?php
    $query="SELECT COUNT(p1a) AS 'totale_colonna_p1a' FROM tabella GROUP BY p1a WITH ROLLUP";
    $esegui = mysql_query($query) or die (mysql_error());
    while ($row = mysql_fetch_row($esegui)){
    echo $row[0]."
    ";
    }
    ?>

    adesso ad esempio l'output che mi restituisce l'echo è:

    1
    2
    4
    2
    1
    10

    che vuol dire

    1 volta hanno inserito lo zero nel questionario
    2 volte hanno inserito uno nel questionario
    4 volte hanno inserito due nel questionario
    2 volte hanno inserito tre nel questionario
    1 volta hanno non hanno inserito nulla
    10 questionari hanno compilato

    ed è proprio il COUNT che volevo MA ora devo trasformare questi numeri in PERCENTUALI, ossia

    1 volta hanno inserito lo zero nel questionario = 10%
    2 volte hanno inserito uno nel questionario = 20%
    4 volte hanno inserito due nel questionario = 40%
    2 volte hanno inserito tre nel questionario = 20%
    1 volta hanno non hanno inserito nulla = 10%

    non so come fare da quell'echo a fargli calcolare quei numeri in percentuale
    ci va un array, vero? ma come??

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non ti serve il rollup nella query.
    Basta che usi mysql_num_rows() per sapere il numero di record, dividi ogni singolo valore per questo e moltiplichi per 100.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727
    grazie per la risposta
    del rollup non ero convinto neanch'io...
    il mio problema è che non so come "estrarre" ogni singolo valore da quel count
    me lo puoi indicare? sono in fusione completa....

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ripensandoci meglio ti ho scritto una fesseria. Con mysql_num_rows visto che devi fare un raggruppamento non otterresti il numero totale dei record, quindi il calcolo della percentuale risulterebbe completamente sballato. Mi sa che ti servono due query, quindi tanto vale calcolare la percentuale direttamente tramite sql.

    Codice PHP:
    $query1 mysql_query("set @tot = (select count(p1a) as tot from tabella)");
    $query2 =  mysql_query("select p1a,count(p1a) as quanti,count(p1a)/@tot*100 as percentuale from tabella group by p1a");
    while (
    $row mysql_fetch_assoc($query2)) {
    echo 
    $row['p1a'].' '.$row['quanti'].' '.$row['percentuale'].'
    '
    ;


  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727
    nicola.....
    ma sai che sei un mitoooooooooooooooooo
    è una funzione spettacoloooo
    la finezza dei 'quanti' poi è la ciliegina
    grazie e complimenti ancora
    quanto mi piacerebbe avere il php così fluente....

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Troppo buono. Prego.

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da nicola75ss
    Ripensandoci meglio ti ho scritto una fesseria. Con mysql_num_rows visto che devi fare un raggruppamento non otterresti il numero totale dei record, quindi il calcolo della percentuale risulterebbe completamente sballato. Mi sa che ti servono due query, quindi tanto vale calcolare la percentuale direttamente tramite sql.

    Codice PHP:
    $query1 mysql_query("set @tot = (select count(p1a) as tot from tabella)");
    $query2 =  mysql_query("select p1a,count(p1a) as quanti,count(p1a)/@tot*100 as percentuale from tabella group by p1a");
    while (
    $row mysql_fetch_assoc($query2)) {
    echo 
    $row['p1a'].' '.$row['quanti'].' '.$row['percentuale'].'
    '
    ;

    domanda domandina...

    Codice PHP:
    $query1 mysql_query("set @tot = (select count(p1a) as tot from tabella)"); 
    da questo codice mi è sembrato di capire che in Mysql c'è la possibilità di settare delle variabili recuperabili in query successive....

    la mia domanda è:

    durano per la durata dello script o vanno oltre?
    per poterla visualizzare senza utilizzarla in un' altra query come faccio?
    la variabile può immagazzinare anche select con diversi risultati o solo valori semplici?
    sono dichiarabili in maniera diretta? es. (set @nome =('pippo')) ?

    grassie
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Provo a risponderti nella speranza di non scrivere troppe sciocchezze.

    Le variabili durano per la durata dello script.
    Per poterla visualizzare dovresti poi richiamare la variabile con una select

    esempio

    set @tot = (select count(id) from tabella)
    select @tot

    ma in questo caso tanto varrebbe usare un'unica query

    Sì, puoi dichiararla in maniera diretta

    set @nome = 'pippo';
    select *,@nome from tabella

    Sul fatto che si possa memorizzare un array non credo. Attendi risposte da gente più preparata.

  9. #9
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    grazie intanto già quello che mi hai detto adesso è utile

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

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.