Newsgroup: it.comp.www.php
Titolo: Quale sistema usereste per gestire date raggruppate per mese?

Cerco di spiegare perché temo che il soggetto sia poco chiaro.
- Ho un DB di eventi e per ogni evento verrà inserita una data
- Ho alcune pagine PHP dove dovranno essere visualizzati solo gli
eventi di un dato mese.
Devo però organizzarmi per come gestire le date ed ho dei dubbi,
questi sono se usare un campo TIMESTAMP oppure un campo DATE.
Quali sono i pro ed i contro dei due formati tenendo conto soprattutto
del raggruppamento mensile?

 del raggruppamento mensile?
Con il timestamp (inteso come nr di secondi trascorsi....) puoi fare 
prima dal punto di vista matematico (ovvero sai a priori il mese di 
luglio 2006 da che nr. a che numero è compreso).
Personalmente preferisco utilizzare i campi date con le funzione data 
native del dmbs; nello specifico per mysql utilizzo la funzione 
month(data) e year(data). Per prendere tutti gli eventi compresi da 
luglio e agosto di basta where month(data) between 7 and 8.
Se vuoi ordinarli per mesi, come criterio di order by sul month, devi 
eseguire un cast, altrimenti ti esegue l'ordine alfabetico 
(1,10,11,12,2)... risolvibile con un order by month(data) +0 (sempre in 
mysql).
	Francesco

 luglio e agosto di basta where month(data) between 7 and 8.
Ciao.
Concordo con Francesco, ed aggiungo che il campo TIMESTAMP ti si
aggiorna all'ora corrente ad ogni modifica compiuta sul record, e non
credo che questo faccia al caso tuo.
Puoi usare il campo DATE, e magari anche il campo TIME per l'ora, nel
caso che tu abbia più eventi nello stesso giorno ed intenda ordinarli
in ordine cronologico.
Buon lavoro
Emanuele

 del raggruppamento mensile?
ti dirò come ho fatto io per una cosa simile, ho aggiunto un campo
mese... Perché ti chiederai, visto che vado a duplicare un dato. In
effetti è vero, però questo mi permette di creare una query che
semplicemente abbia una sola clausula where su di un intero, ma
soprattutto mi permette di fare raggruppamenti con group by. Ad esempio
se tu volessi avere una statistica di quali mesi hanno avuto un numero
di alcuni eventi maggiorni di n ti basterebbe una sola query, mentre in
caso contrario te ne servirebbero dodici.
Il tutto al costo di un solo campo, che può anche essere piccolissimo
(bastano 4bit).
Poi tutto sta a capire cosa ci vuoi fare con i dati che hai, io ho
bisogno di frequenti statistiche come quella indicata sopra, magari a
te non serve.
Mattia

 soprattutto mi permette di fare raggruppamenti con group by
cosa che puoi fare benissimo senza mettere un campo apposta: basta un
GROUP BY MONTH(campoData)

T_PAAMAYIM_NEKUDOTAYM wrote:

hai ragione... però faccio alcune considerazioni:
1. usando la funzione month() mi legherei a dbms che hanno tale
funzionalità. Forse questa è talmente semplice che è implementato da tutti,
ma costituisce sempre un forse.
2. ogni query implicherebbe l'esecuzione della funzione month() per ogni
record. Non mi sembra particolarmente efficiente, visto che può essere
calcolato una sola volta per tutte con costi minimi in termini di maggiore
spazio usato.
3. un campo "mese" può essere impostato come indice e permettere operazioni
di raggruppamento e selezione in maniera molto veloce. Al contrario un
campo data, anche se impostato come indice, dubito porterebbe benefici se
usato come argomento di una funzione.
Se il raggruppamento o la selezione per mese viene fatta saltuariamente
allora è sufficiente usare la funzione month() come da te suggerito. Se,
come nel mio caso tali operazioni sono svolte spesso, anzi in predominanza
sulle altre, allora è vantaggioso creare un campo apposito.
Mattia