Newsgroup: it.comp.www.php
Titolo: domanda su intervallo di tempo in una query

Salve ragazzi, mi scuso per il leggero OT ma avrei da porvi una domanda 
su una query di mysql.
Devo calcolare i posts inseriti nell'ultimo mese da un certo utente e 
non so che funzione usare. Preciso che non mi serve il classico date_sub 
con l'intervallo degli ultimi 30 giorni dal momento che in mesi di 28 
giorni o 31 non mi restituirebbe un risultato che non parte 
effettivamente dal 1ï¿œ del mese precedente. Mi servirebbe un sistema che 
calcoli esattamente i posts dalle 0.00 dell'ultimo mese (es. gennaio) 
all'1 del mese corrente. Che mi consigliate?
Avevo pensato a qualcosa tipo:
WHERE ((UNIX_TIMESTAMP(time)>UNIX_TIMESTAMP('.............')) AND 
(UNIX_TIMESTAMP(time)<UNIX_TIMESTAMP('..............')))
time ï¿œ la data del post inserito nel dbase. I puntini di sospensione 
sono appunto quello che dovrei inserire. Considerate che la cosa deve 
agire in modo dinamico, cioï¿œ ogni mese deve contare i posts dell'ultimo 
mese, altrimenti mi sarebbe bastato mettere dei valori fissi tipo 
2010-01-01 00:00:00 e 2010-02-01 00:00:00 ecc.
Grazie mille.
Fabio

 Che mi consigliate?
Hai provato a scrivere
WHERE MONTH(time) = MONTH(CURDATE())
?
-- 
Elminster

 (UNIX_TIMESTAMP(time)<UNIX_TIMESTAMP('..............')))
Perche' passare dai secondi quando ti servono solamente i giorni?!
SELECT * FROM tabella WHERE data > DATE_SUB(CURDATE(), INTERVAL 30 DAY)
restituisce i record in cui `data` e' successiva agli ultimi 30 giorni
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Spegni la televisione e apri un libro!

 ?
ma month non va solo con le versioni piï¿œ recenti di mysql?

 restituisce i record in cui `data` e' successiva agli ultimi 30 giorni
ok ma ho precisato che vorrei evitare DATE_SUB con INTERVAL perchï¿œ 
basando l'intervallo su un numero di giorni a ritroso (30 nel tuo 
esempio), in casi come quello del mese di febbraio di 28 gg mi 
sballerebbe il conto. Insomma non mi elencherebbe proprio i posts dall'1 
del mese alla fine, indietreggiando di 30 giorni ok, ma mi sforerebbe 
febbraio che ï¿œ soli 28 giorni. Mi spiego?

 febbraio che è soli 28 giorni. Mi spiego?
Se non ho capito male, vuoi dal giorno 1 del mese corrente?
SELEC ...
FROM ...
WHERE campo_data >= DATE_FORMAT(NOW(), '%Y-%m-01')


wrote:

Se invece ti interessano i post dall'1 del mese precedente fino all'1
(escluso) del mese corrente:
SELECT ...
FROM ...
WHERE campo_data >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 MONTH),
"%Y-%m-%d")
AND   campo_data < DATE_FORMAT(NOW(), "%Y-%m-01")

Errore. Intendevo:
SELECT ...
FROM ...
WHERE campo_data >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 MONTH),
"%Y-%m-01")


Darkbyte [Google] ha scritto:

ok forse ci siamo. Solo un dubbio: quel -1 month che tu sappia mi 
indietreggia di un mese come mese o come giorni (es 30 giorni di 
default). Per me � vitale capirlo perch� vorrei evitare il problema di 
mesi come febbraio che non hanno un numero di giorni pari a 30. Grazie.

 mesi come febbraio che non hanno un numero di giorni pari a 30. Grazie.
Chiaramente come mese e non come giorni :)
Non fa altro che prendere la data originale e decrementare il mese, e
se necessario l'anno.
E chiaramente tratta bene i casi particolari:
mysql> select date_add('2010-03-31', INTERVAL -1 MONTH) AS mese;
+------------+
| mese       |
+------------+
| 2010-02-28 |
+------------+
1 row in set (0.00 sec)
mysql> select date_add('2010-05-31', INTERVAL -1 MONTH) AS mese;
+------------+
| mese       |
+------------+
| 2010-04-30 |
+------------+
1 row in set (0.00 sec)
mysql> select date_add('2010-01-31', INTERVAL -1 MONTH) AS mese;
+------------+
| mese       |
+------------+
| 2009-12-31 |
+------------+
1 row in set (0.00 sec)

 E chiaramente tratta bene i casi particolari:
CUT
Grazie mille, era quello che mi serviva.
Voglio ringraziare anche gli altri ragazzi che mi hanno risposto, � 
davvero lodevole il vostro aiuto senza chiedere niente in cambio.
Ciao a tutti.
Fabio