Query con SELECT COUNT multipli

di il
15 risposte

Query con SELECT COUNT multipli

Per evitare mille righe di codice Php vorrei eseguire una query su più campi in un colpo solo. 

Ho una tabella “mytable” con campi Id, Tipo e Data.

SELECT COUNT(Data) AS Tot
SELECT COUNT(Tipo) AS aaa WHERE Tipo='a'
SELCET COUNT(Tipo) AS bbb WHERE Tipo='b'
etc. 
WHERE id='5'

Ovvio che scritta così è come me la immagino io. Ho provato anche a mettere la riga 2 e 3 tra parentesi ma mi da' errore lo stesso. 

Come potrei “tradurla” in Mysql?

15 Risposte

  • Re: Query con SELECT COUNT multipli

    Se ho capito bene cosa vuoi ottenere, dovresti poter fare così:

    SELECT Tipo, COUNT(*) AS occorrenze FROM `mytable` GROUP BY Tipo

    Questa query dovrebbe produrre un resultset di questo tipo:

    Tipo | occorrenze
    a      8
    b      10
    c      1
    ...

    Per il totale ti basta sommare tra loro tutti valori della colonna occorrenze, lato php verrebbe estremamente comodo usando la combinazione di array_column e array_sum. Ma se vuoi una soluzione in puro SQL, basta usare una UNION per aggiungere al recordset di prima una nuova riga col tipo “totale” e come occorrenze il conteggio di tutti i record.

    SELECT 'totale' AS Tipo, COUNT(*) AS occorrenze FROM `mytable`
    UNION
    SELECT Tipo, COUNT(*) AS occorrenze FROM `mytable`
    GROUP BY Tipo
  • Re: Query con SELECT COUNT multipli

    19/11/2024 - blancks ha scritto:


    uesta query dovrebbe produrre un resultset di questo tipo:

    Tipo | occorrenze
    a      8
    b      10
    c      1
    ...

    Scusa mi sto confondendo. L'array come lo recupero da qui?

  • Re: Query con SELECT COUNT multipli

    L'array è il risultato della query… un insieme di valori indicizzato…

  • Re: Query con SELECT COUNT multipli

    19/11/2024 - ricmanx ha scritto:


    Scusa mi sto confondendo. L'array come lo recupero da qui?

    Nel caso specifico dipende da quale estensione stai utilizzando per dialogare col database nel tuo script php. 
    Generalmente sia mysqli che PDO hanno un loro metodo “fetch all” per permettere di recuperare tutte le righe restituite dall'elaborazione di una query come array, a quel punto puoi trattare i dati secondo necessità

  • Re: Query con SELECT COUNT multipli

    Una query fatta in quel modo, non si può fare. 

    DEVI fare diverse query, eventualmente fai la UNION dei risultati MA lo puoi fare SOLO se tutte le select ritornano lo stesso numero di colonne, con lo stesso nome e lo stesso tipo di dato in ogni colonna. 

    Altrimenti, rullo di tamburi, migliaia di righe di codice ;-)

    Comunque, se sono migliaia di righe di codice, vuol dire che c'e' ben altro che non va! 

  • Re: Query con SELECT COUNT multipli

    SELECT Tipo, COUNT(*) AS occorrenze FROM `mytable`
    GROUP BY Tipo
    union
    SELECT 'TOTALE', COUNT(Tipo) AS occorrenze FROM `mytable`

    per completezza…

  • Re: Query con SELECT COUNT multipli

    20/11/2024 - sihsandrea ha scritto:


    SELECT Tipo, COUNT(*) AS occorrenze FROM `mytable`
    GROUP BY Tipo
    union
    SELECT 'TOTALE', COUNT(Tipo) AS occorrenze FROM `mytable`

    per completezza…

    Ok. In effetti funziona. La eseguo in phpmyadmin e ottengo i valori come mostravi anche tu. 

    Ora forse la mia ignoranza va oltre il mysql perchè l'array che ottengo così 

    While{ ============
    $val[]=[
        $row['Tipo']=>$row['occorrenze']
     ];
     } //end while
     
     print_r($val);
     
     Array ( [0] => Array ( [p] => 2 ) [1] => Array ( [r] => 1 ) [2] => Array ( [TOTALE] => 3 ) )

    A questo punto come recupero i valori per mettere in "bella copia" il tutto? Pensavo di usare “echo $val['p'];” per recuperare il mio valore 2 ma non è così. 

    Vorrei mostrare un testo tipo questo.  Ho registrato un totale di 3 valori di cui 2 sono “p”  e 1 sono “r” 

  • Re: Query con SELECT COUNT multipli

    Un array lo hai con la query, a che serve crearne un altro?

    https://it.siteground.com/tutorial/php-mysql/visualizzare-tabella-dati/

  • Re: Query con SELECT COUNT multipli

    20/11/2024 - sihsandrea ha scritto:


    Un array lo hai con la query, a che serve crearne un altro?

    https://it.siteground.com/tutorial/php-mysql/visualizzare-tabella-dati/

    Creavo un array perchè pensavo fosse il modo giusto per “uscire” dal ciclo while portandomi in giro i valori vari per infiocchettare l'html (senza intabellare i dati).  Un po' come facevo vedere nell'esempio del post precedente ("Ho registrato un totale di..."). Ma non posso usare $val[0][p] (che dovrebbe restituire 2) perche siccome io a monte filtro per ID utente un altro utente al posto della “p” potrebbe avere un'altra lettera (tipo una “a”) e la stessa “p” potrebbe non essere sempre sull'indice 0 dell'array. 

  • Re: Query con SELECT COUNT multipli

    Tu hai chiesto una select multicount…

    Ti hanno risposto e adesso scatta la seconda domanda…

    https://www.html.it/pag/63661/mysqli-fetch-recuperare-i-risultati-di-una-query/

    Qui c'è quello che cerchi…

    Alla prossima difficotà  apri un nuovo 3d.

  • Re: Query con SELECT COUNT multipli

    21/11/2024 - sihsandrea ha scritto:


    Qui c'è quello che cerchi…

    Alla prossima difficotà  apri un nuovo 3d.

    In realtà nel link non c'è quello cercavo. Per correttezza farò la domanda partendo da zero nel forum del php. Grazie mille

  • Re: Query con SELECT COUNT multipli

    Non capisco cosa ti serve…

    Fai la query del totale e prelevi il valore e lo metti su una variabile “totale”

    Fai la query multiselect (ormai la chiamo così)

    Conti le righe

    Inizi il ciclo

           1) prelevi tipo e occorrenze

         2)  Echo “ci sono  ” $occorrenze “ su ”. $totale “ per il tipo ” $tipo

    Fino alla fine delle righe…

    Se poi hai difficoltà apri un altro 3d.

    Nel link c'è scritto come recuperare i valori dei campi dalla query ergo non ti serve un array.

  • Re: Query con SELECT COUNT multipli

    22/11/2024 - sihsandrea ha scritto:


    Inizi il ciclo

    Forse è questo il problema. Il ciclo. L'idea mia era prendere i dati e portarmeli fuori dal ciclo per poterli mettere qua e là nell'html. 

    Ma non posso perchè il un utente (id) può avere uno o più Tipo (col suo valore di occorrenza). Per questo pensavo di ricostruire un array e portarlo fuori dal ciclo. 

    Qui https://www.iprogrammatori.it/forum-programmazione/php/array-dentro-array-con-indici-che-variano-t54260.html ho provato a spiegarlo meglio...  Ma forse non ci sono riuscito nemmeno stavolta. 

  • Re: Query con SELECT COUNT multipli

    All'inizio avevo fatto una query per il Totale, una per il Tipo p, una per il tipo a, una per tipo r etc etc (ho 5 tipi) e per ognuna dovevo fare un ciclo while che mi producesse UN numero dentro a una variabile. 

    Forse dovrei tornare su quei passi... ?   Ma mi sembrava troppo codice “ripetitivo”.  e allora ho ideato (anzi l'ho chiesta a voi che mi avete aiutato)  una query  unica “multiselect”

Devi accedere o registrarti per scrivere nel forum
15 risposte