• User Attivo

    enunciato SQL select count()

    Salve a tutti avevo intenzione di sviluppare una pagina web in cui vengono visualizzati il numero dei record mese per mese. Mi spiego meglio: avendo una tabella MySQL con circa 12 campi (due di essi contengono le date di inserimento dei record stessi) volevo fare in modo che mi si visualizzate qualcosa del genere:

    gennaio 2002 - 19 record
    febbraio 2002 -11 record
    .......................
    e così via
    ...................
    marzo 2006 - 4 record

    Ho precisato che sono 2 i campi che contengono la stessa data in quanto un campo contiene il formato standard ANSI SQL e l'altro campo contiene la data in un formato più bello in modo esteso.

    campo data_inserimento esempio: 2006-02-24 17:19:22
    campo data_estesa_inserimento esempio: Friday 24 February 2006

    Non riesco praticamente a elaborare la query di estrazione. Sapreste darmi un aiuto?
    Mi stavo perdendo in delle cose assurde, del tipo avevo realizzato una tabella con i 12 mesi dell'anno dalla quale recuperare un array per poi inserirlo in una query di questo tipo

    $query="select count() from tabella where data_estesa_inserimento like '%$row%';";

    Ovviamente questa query era all'interno di un ciclo for per cui la variabile $row* acquisiva ad ogni routine, uno per volta tutti i mesi dell'anno.. Ma a parte che la pagina non ha dato risultati sperati, non tiene conto delle date di diverso anno. Per questo non mi sono sforzato più di tanto con questo metodo e quindi ho cancellato la tabella dei mesi dell'anno.

    Conoscete un sistema efficace per fare questo?
    Resto a disposizione per eventuali chiarimenti. :ciauz:


  • Super User

    prova così:
    SELECT count( * ) AS numero, MONTHNAME(DATA ) AS mese
    FROM commenti
    GROUP BY mese

    oppure così:
    SELECT count( * ) AS numero, MONTH(DATA ) AS mese
    FROM commenti
    GROUP BY mese

    per altri approfondimenti leggi il manuale:
    http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

    ciauz :ciauz:


  • User Attivo

    Grazie 1000 Tymba; entrambe le query che mi hai suggerito sono corrette, però non fanno a caso mio in quanto non tengono conto di date come per esempio:

    marzo 2005 - 5 record
    marzo 2006 - 6 record

    in questo caso mi ritroverei semplicemente

    marzo 11 record

    Questo piccolo intoppo l'ho risolto facendo una tabella comparativa creata dinamicamente.... Solo che per rendere la pagina più efficiente, più leggera e ottimizzata meglio insomma, dovrei risolvere questo problema:

    estrazione di tutti gli anni nella nostra tabella dal campo data```
    $wt="SELECT DATE_FORMAT('$array[0]', '%Y') as 'y';";
    $set=mysql_query($wt) or print("
    Query $set non eseguita
    ");
    $mt=mysql_fetch_row($set);
    print("
    $mt[0]");

    
    Array[0] contiene solo l'anno relativo al campo data di tutti i record della tabella.
    l'ultima riga **print("
     $mt[0]")** mi stampa il risultato come speravo cioè una lista di questo genere:
    
    1999
    2000
    2000
    2000
    2002
    2003
    2004
    2006
    2006
    2006
    
    Da questa lista estratta dovrei recuperare il valore piu grande e quello piu piccolo. Come faccio? Se risolvo questo problemino riesco (con un ciclo FOR) a ottenere quello che volevo cioe
    un contatore di questo tipo:
    
    marzo 2005 - 5 record
    aprile 2005 - 2 record
    .........
    e cosi via
    .........
    marzo 2006 - 3 record
    
    Ho provato le funzioni **max()** e **min()** ma non funzionano forse perchè essendo un campo data è considerata una stringa con più argomenti e quindi le 2 funzioni restituiscono il valore più a destra oppure a sinistra.

  • Super User

    no no no!!!

    hai un database sotto, fai lavorare lui non lavorare te.

    hai più anni nella tabella, aggiungi l'anno nel group by.

    ti ho dato lo spunto, la prossima volta che passo di qua ti do anche la soluzione.

    prova in questo tempo a cercarla da solo.
    come indizio ti dico che puoi e devi risolvere tutto con una query.

    ti ho lasciato un link al manuale, dai una bella lettura a quella pagina e capirai come fare.

    se non ce la fai ti do la soluzione 🙂


  • User Attivo

    Ecco lo sapevo..... () mi stavo perdendo.
    Tutto risolto con la query```
    SELECT count( * ) AS numero, MONTHNAME(DATA ) AS mese, YEAR(DATA) AS anno, FROM tbl_name GROUP BY mese, anno order by DATA DESC

    
    Rapido e indolore ..  :D
    
    GRAZIEEE!!!