Newsgroup: it.comp.www.php
Titolo: Query fra un intervallo di timestamp

Ciao
Nessuno sa spiegarmi come si fa una query che selezioni un intervallo?
Io ( leggendo il manuale ) ho provato così:
 $query="SELECT nome_campo FROM tabella WHERE campo_timestamp BETWEEN
'$data_inizio' AND '$data_fine'";
ma mi pare che non funzioni.
Aiutooooooooo

 '$data_inizio' AND '$data_fine'";
timestamp di unix, su mysql č un numero, non una data.
se il campo lo popoli col timestamp di unix poi devi fare:
$query="SELECT nome_campo FROM tabella WHERE campo_timestamp BETWEEN
unix_timestamp('$data_inizio') AND unix_timestamp('$data_fine')";
in questo modo ti fa un paragone sui secondi dall'epoch.
(adesso siamo quasi a 10 miliardi e 11 milioni di secondi...)
altrimenti puoi fare il contrario:
$query="SELECT nome_campo FROM tabella WHERE
from_unixtime(campo_timestamp) BETWEEN '$data_inizio' AND '$data_fine'";
cosě confronta la data come la leggiamo noi.
ciao!!


Domanda: come sono $data_inizio e $data_fine?
Se non sono in un formato 'buono' non puo' funzionare (ad esempio:
TIMESTAMP 20011212170000 oppure se hai DATETIME '2001-12-12 17:00:00'
si puo' convertire nella query stessa tra i vari formati.
Esempio: contare i news tra 01/12/2001 e 31/12/2001 avendo un campo
Timestamp TT trasformando con due rappresentazioni della data diversa:
SELECT COUNT(*) FROM news WHERE TT BETWEEN DATE_FORMAT('2001/12/01
00:00:00', '%Y%m%d%H%i%s') AND 20011231235959;

 Aiutooooooooo
Probabilmente dipende da come imposti le variabili PHP.
Ho fatto una prova veloce, eccoti l'esempio:
mysql> select * from prova;
+------+----------+----------+
| id   | d1       | d2       |
+------+----------+----------+
|    1 | 20020111 | 20020111 |
+------+----------+----------+
1 row in set (0.01 sec)
mysql> SELECT * FROM prova WHERE d1 BETWEEN 20020110 AND 20020112;
+------+----------+----------+
| id   | d1       | d2       |
+------+----------+----------+
|    1 | 20020111 | 20020111 |
+------+----------+----------+
1 row in set (0.02 sec)
Ciao
_China

 00:00:00', '%Y%m%d%H%i%s') AND 20011231235959;
quello che intendi tu č il timestamp mysql e non unix... io non so quale 
intendesse...

PS - Nella mia prova i due campi d1 e d2 sono due semplici campi TIMESTAMP()
di mySQL e con valore impostato a (8), cioè
    TIMESTAMP(8)
Quindi contengono semplicemente la data di creazione dell'unica riga della
tabella nel formato
    AAAAMMGG
cioè
    20020111
Ma mySQL permette in genere molta flessibilità nelle operazioni sulle date.
Basta che gliele presenti correttamente (sempre nella sequenza AAAAMMGG?
cioè con l'anno sempre a sinistra).
Ciao
_China

 ha scritto nel messaggio
news:Njy%7.3422$sW5.1...@news2.tin.it...

Ok Grazie mille Ragazzi :-)
o risoloto così:
Premesso ( nel db ho un campo timestamp(14)  e mi autoinvio le var che
vedete all'interno di srtval())
    $hms_inizio="010101";    //ore-minuti-secondi dai quali inzio la ricerca
( mi servono per copletare il timestamp (suppongo un inizio giornata )
    $hms_fine="245959";      // ( mi servono per copletare il
timestamp(suppongo una fine giornata) )
    $data_inizio=strval("$dal_anno$dal_mese$dal_giorno$hms_inizio");
    $data_fine=strval("$al_anno$al_mese$al_giorno$hms_fine");
    $query_stat="SELECT nome_campo FROM tabella WHERE campo_timestamp
BETWEEN ".$data_inizio." AND ".$data_fine."";
Alla prossima ... :-D
                                                                        --
Yena --

     $hms_fine="245959";      // ( mi servono per copletare il
non sarebbe meglio 000000 - 235959?

 ha scritto nel
messaggio news:MVz%7.9691$cU4.3...@twister1.libero.it...

Azz Jurgen hai sempre ragione !!! mersi !!
                                        -- Yena --

 intendesse...
(AFAIK) TIMESTAMP in mysql sono uguali ai timestamp unix (time()) e
garantite solo dal 1970 fino al 2037. Si usano per operazioni che hanno una
certa attualita' (non date di nascita', ma sistemi news, logging, expire
ecc.) Timestamp sono compatti (4byte), il timestamp(14) indica solo quante
cifre vengono visualizzate, non i byte per il storage che rimane sempre a 4
byte.
Per evitare problemi con le date oltre il 2037 (o nel futuro del unix 32bit
unsigned 2078 +-) e prima del 1970 si devono usare i DATE (DATETIME).
Prova da fare: inserire una data 01/01/1969 in timestamp ed il risultato
sara' cmq. 00000000.
insert into t values(19690101000000);

 
forse non parliamo dello stesso timestamp??
il timestamp unix non è un' informazione relativa alla data come 
yyyymmdd...
ma è il count dei secondi dal 1/1/70 (epoch) fino al momento x.
quindi, quello che in formato yyyymmddhhmiss (14) è "19791218174500" 
tradotto in timestamp è 314383500 (secondi dal 1/1/70) e non può essere 
scritto in un numero minore di cifre.
per il fatto che non sia adatto per le anagrafiche ecc. ma solo per le 
'date informatiche' ti do ragione. per il fatto che non è garantito oltre 
il 2037... beh, come linux è stato il primo sistema operativo a supportare 
l'ipv6, magari sarà anche il primo a supportare date fino al 8002 A.D.!!

 l'ipv6, magari sarà anche il primo a supportare date fino al 8002 A.D.!!
DATETIME in mysql va fino al 31/12/9999
:)))

 DATETIME in mysql va fino al 31/12/9999
...sai che casino nel 10000? :^)
cazzarola, ho cercato di coglierti in fallo ma sembra proprio impossibile!
(e nel ng c'è tanto da imparare nei tuoi post...)
ciao!!