Visualizzazione risultati 1 fino 15 di 15

Discussione: contare valori uguali di una colonna

  1. #1
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito contare valori uguali di una colonna

    Salve a tutti, ho in una colonna tre possibili valori che sono: 1, 2, 3.
    Vorrei trovare un modo per contare quante volte sono ripetuti.
    Ho provato in vari modi senza riuscirci.
    Ho letto che esiste la funzione SUM, ma non ho capito come applicarla.
    (La tabella si chiama "elenco" e la colonna "atti".)

    Grazie infinite

  2. #2
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Usando SUM la query è:
    Codice PHP:
    SELECT SUM(atti) FROM elenco WHERE atti = '1' # 1, 2 o 3;
    Alternativamente puoi utilizzare mysql_num_rows():

    Codice PHP:
    $var = myswl_num_rows(mysql_query("SELECT * FROM elenco WHERE atti = '1' # 1, 2 o 3"));
    Lo stesso lo fai con MySQLi o simili.
    Apprezzi l'aiuto? Offrimi un caffè!

  3. #3
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie miki92, le query che mi hai suggerito le ho provate su PhpMyAdmin.
    La prima, se metto il valore atti='2' # 1,2,3 mi riporta il risultato sbagliato, mentre se ricerco il valore di atti uguale '3' mi conta il totale complessivo di tutti i valori.
    Risponde correttamente solo con atti uguale a '1'.
    Usando la seconda query invece, i risultati nelle tre combinazioni vanno bene. Cioè alternando atti = 1, oppure 2, oppure 3, mi visualizza i tre risultati intabellati e giusti.

    Quello però che infine vorrei realizzare è poter mostrare a video i tre risultati, con il loro significato.
    Così ad es.
    valore 1 = 32
    valore 2 = 45
    valore 3 = 7
    E se fosse possibile anche il totale complessivo. Per questo avevo capito, ma forse sbaglio, che con la funzione SUN si poteva fare con un'unica query. Però se ne devo tre (di query, una per ogni totale parziale), va bene ugualmente.
    Grazie ancora per la cortese pazienza.
    Ultima modifica di pierinik : 25-01-2015 alle ore 06.03.17

  4. #4
    Guest

    Predefinito

    In realtà SUM() fa la somma dei valori del campo.

    Per contare usa COUNT()

    Codice PHP:
    SELECT atti, COUNT(*) FROM elenco GROUP BY atti
    ti restituisce, per ogni valore di atti in numero delle occorrenze.

    valore1 = x
    valore2 = y
    valore 3 = z

    se vuoi aggiungere il totatle aggiungi alla query WITH ROLLUP

    ATTENTO: l'ultima riga sarà il totale, ma il valore della prima colonna sarà uguale a NULL quindi con


    Codice PHP:
    SELECT atti, COUNT(*) FROM elenco GROUP BY atti WITH ROLLUP
    otterrai

    valore1 = x
    valore2 = y
    valore 3 = z
    NULL = somma (x+y+z)
    Ultima modifica di vplaza : 25-01-2015 alle ore 10.01.45

  5. #5
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie vplaza è proprio quello che vorrei fare.
    Come posso realizzarlo in php ?
    Ho provato così:
    Codice PHP:
    $calc=mysql_query("SELECT atti, COUNT(*) FROM elenco GROUP BY atti WITH ROLLUP");
    while(
    $tot = mysql_fetch_array($calc)){
    echo
    $tot['atti']."<br />";
    }
    Però mi esce solo 1, 2 ,3 che non sono i risultati, ma i valori della colonna.
    La query va bene perchè l'ho provata, ma non riesco a renderla pratica.
    Inoltre ai vari numeri devo far corrispondere il suo significato reale.
    Es. mele= 8, pere = 16, banane=22. Cioè invece di 1, 2 e 3 le parole mele, pere, banane.

    Grazie a tutti

  6. #6
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Codice PHP:
    // Conto le mele
    $mele = myswl_num_rows(mysql_query("SELECT * FROM elenco WHERE atti = '1'"));

    // Conto le pere
    $pere = myswl_num_rows(mysql_query("SELECT * FROM elenco WHERE atti = '2'"));

    // Conto le banane
    $banane = myswl_num_rows(mysql_query("SELECT * FROM elenco WHERE atti = '3'"));

    // Sommo il tutto
    $totale = $mele+$pere+$banane;

    // Mostro il tutto:

    echo "Mele: {$mele}<br>
    Pere:
    {$pere}<br>
    Banane:
    {$banane}<br>
    VALORE COMPLESSIVO:
    {$totale}";
    Ultima modifica di miki92 : 25-01-2015 alle ore 18.51.23
    Apprezzi l'aiuto? Offrimi un caffè!

  7. #7
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Prova così:
    Codice PHP:
    $calc=mysql_query("SELECT atti, COUNT(*) AS numero FROM elenco GROUP BY atti");
    while(
    $tot = mysql_fetch_array($calc))
    {
    echo
    $tot['atti']."-".$tot['numero']."<br />";
    }
    Teoricamente andava benissimo anche senza "AS numero", prelevando il dato in $tot['COUNT(*)'].

    p.s: usa le funzioni mysqli invece di mysql che sono obsolete.

    Ciao!
    Ultima modifica di alemoppo : 25-01-2015 alle ore 19.12.10

  8. #8
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie a tutti per le risposte.
    La soluzione di alemoppo benchè più pratica non risolve completamente le mie esigenze, in quanto nella colonna 'atti' ho solo i valori 1,2,3.
    Questi valori devo tradurli, per così dire, nel loro significato. Altrimenti visualizzo solo numeri che non dicono niente, benchè l'operazione funzioni perfettamente.

    L'alternativa di miki92 risponde meglio a quello che voglio ottenere, ma ho il seguente errore:
    Fatal error: Call to undefined function myswl_num_rows() in ...
    Praticamente già al primo conteggio, quelle delle mele, ricevo il messaggio di errore.

    Grazie per il competente supporto di tutti.

  9. #9
    Guest

    Predefinito

    Per cercare di darti una mano mano alla risoluzione del tuo problema, dovresti fornire le informazioni senza aspettare che te le si chieda.

    Ad esempio, dove e come fai l'associazione tra numeri e nomi (1=mele, 2= pere, ecc...)?
    Hai una tabella sul DB? li tieni in un file? In un Array?

  10. #10
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Ho semplicemente una tabella che si popola tramite form.
    Mi bastano solo tre combinazioni.
    Cioè viene fatta una scelta dal form su tre opzioni e quindi nel database, in una colonna, riporto le risposte con i numeri 1, 2 e 3.

    Quello che voglio fare adesso è estrarre i vari totali e ad ogni totale attribuire il giusto significato.
    La risoluzione di alemoppo va più che bene, ma visualizza ad es. 1-5, 2-156, 3-24 e invece devo poter anche tradurre i simboli 1,2 e 3.
    Quindi dover visualizzare mele-5, pere-156, banane-24 e magari anche il totale complessivo di mele+pere+banane.

    La strada di miki92 è quella che corrisponde maggiormente alla mia esigenza. Purtroppo mi segnala un errore.
    Spero di essere stato chiaro. Altrimenti scusatemi.

  11. #11
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Devi rispondere alla domanda di vplaza. Con una semplice sostituzione puoi usare il mio codice e sostituire i numeri con i nomi, ma occorre sapere se i nomi sono salvati in un db o in un array o file o altro. Utilizzeresti quindi una sola query, il codice sarebbe minore e più ottimizzato.

    Il codice di miki92 ti da errore perché ha sbagliato a digitare: immagino intendesse mysql_num_rows().

    Ciao!

  12. #12
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Forse ho capito. I nomi non sono salvati da nessuna parte.
    Quando faccio le query uso una serie di if per assegnare il valore ad una variabile in questo modo:
    Codice PHP:
    if ($atti==1){$a='pere';}
    elseif (
    $atti==2){$a='mele';}
    if (
    $atti==3){$a='banane';}
    Così uso questa variabile dove mi occorre.
    I dati sono solo tre, per questo non ho fatto altre cose.
    Grazie

  13. #13
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Semplicemente:

    Codice PHP:
    $sostituzioni = array(
    1 => 'mele',
    2 => 'pere',
    3 => 'banane'
    );

    $calc=mysql_query("SELECT atti, COUNT(*) AS numero FROM elenco GROUP BY atti");
    while(
    $tot = mysql_fetch_array($calc))
    {
    echo
    str_replace(array_keys($sostituzioni),$sostituzioni, $tot['atti'])."-".$tot['numero']."<br />";
    }
    Ciao!

  14. #14
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie alemoppo è perfetto.
    Anche il codice di miki92, dopo la correzione, ha funzionato.
    Che dire ? Grazie veramente a tutti.
    Ciao

  15. #15
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Un ultima cosa, per avere il totale delle varie voci ho usato WITH ROLLUP.
    Ovviamente mi esce il totale, ma senza descrizione.
    Come dovrei fare per aggiungere all'array questa voce ?
    Grazie.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •