Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Ciclo e Query MySQL

  1. #1

    Ciclo e Query MySQL

    Salve a tutti, ecco la Query su cui vi chiedo aiuto:

    codice:
    $query19 = mysql_query("SELECT COUNT(ID) FROM (
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 1 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 2 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 3 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 4 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 5 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 6 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 7 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 8 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 9 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 10 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 11 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    
    					UNION 
    
    					SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = 12 and tipo_dato in (8,2)
    					GROUP BY `Data_giorno`
    					)tempdb",$conn);
    Sono tutte UNION di query in cui cambia solo il mese, che va da 1 a 12. Sapreste dirmi come poter ottimizzare questo codice?? Ho visto che esiste qualche ciclo ma onestamente non saprei impostare il tutto...

    Vi ringrazio moltissimo!!!
    Gianfranco

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    231
    Puoi costruire la query in PHP

    codice:
    $queryString= "";
    
    for($i = 1; $i < 13; $i++)
    {
        $queryString += "SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` = $i and tipo_dato in (8,2) GROUP BY `Data_giorno`" + ($i != 12 ? " UNION " : "");
    }
    
    $query = "SELECT COUNT(ID) FROM (" + $queryString+ ")tempdb";
    
    $query19 = mysql_query($queryString);
    Se la risposta ti è stata in qualche modo di aiuto o ti va di supportarmi metti "mi piace" alla pagina a questo link

    https://www.facebook.com/blogprogrammatori

    Non ti costa nulla!!

  3. #3
    Certo, una buona soluzione che ho evitato intenzionalmente: ho la sensazione che una query come quella proposta venga eseguita più lentamente: meglio una query unica!

    Con l'occasione per chiedere ai più esperti se questa sensazione che ho avuto sia vera o meno


    Grazie mille!!
    Gianfranco

  4. #4
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    E se mettessi semplicemente

    SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` IN (1,2,3,4,5,6,7,8,9,10,11,12) and tipo_dato in (8,2) GROUP BY `Data_giorno`

    o anche

    SELECT ID FROM database_stazioni WHERE `id_stazione` = '" .$cat. "' AND `Data_anno`= '" .$y. "' AND `Data_mese` BETWEEN 1 AND 12 and tipo_dato in (8,2) GROUP BY `Data_giorno`

  5. #5
    Entrambe le due query danno come risultato 31 righe, ovvero i numeri di giorni..

    Io vorrei in via definitiva ottenere il numero di giorni totali in cui sono presenti dati aventi tipo_dato pari a 8 o 2 (possono coesistere o essere presenti singolarmente senza criteri precisi), presi una sola volta.

    Per cui se in un mese ho da giorno 1 a 31 dati di tipo 8 e 5 giorni dati anche di tipo 2, la query deve darmi sempre 31 e non 35.
    Gianfranco

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