[risolto] Query e date! Sto impazzendo

danielloantonio

Utente Attivo
20 Lug 2012
110
0
0
Buongiorno e buon anno a tutti,
ho un piccolo problema con una query che per voi potrà essere banale ma io provo e riprovo e non ci riesco..
Ho una tabella che contiene degli eventi e per ognuno di questi c'è un timestamp di inizio e uno di fine..
chiamando la pagina /page.php?day=03&month=01&year=2014 vorrei selezionare con la query non solo gli eventi che iniziano in un determinato giorno ma anche quelli che ad esempio iniziano il 02 gennaio e finiscono il 03...
Questo è quello che ho provato:
Codice:
SELECT * FROM events WHERE (CURDATE() BETWEEN DATE(inizio) AND DATE(fine))
Non ho idea di come altro fare e se non è chiaro qualcosa chiarirò meglio... in ogni caso grazie a tutti in anticipo :D

P.S. vorrei inoltre che l'evento, se ad esempio finisse il 03 alle 12:00, sarebbe visibile per tutta la giornata e non fino alle 12:00....vorrei quindi filtrarli per data e non ora
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se non ho capito male tu hai la tabella events dove hai anche due campi "inizio" e "fine" espressi in timestamp
e chiami la pagina /page.php?day=03&month=01&year=2014
prova così
PHP:
<?php
//.......
$gg=(int)$_GET['day'];
$mm=(int)$_GET['month'];
$gg=(int)$_GET['year'];
//trasformi in timestamp
$ini=mktime(0,0,0,$mm,$gg,$aa);//ore 0:0:0 del $gg/$mm/$aa
$fin=mktime(23,59,59,$mm,$gg,$aa)+(24*60*60);// mezzanotte del  $gg+1/$mm/$aa
$query="SELECT * FROM events WHERE inizio >=$ini AND fine <= $fin";
//.....
?>
 

danielloantonio

Utente Attivo
20 Lug 2012
110
0
0
ciao
se non ho capito male tu hai la tabella events dove hai anche due campi "inizio" e "fine" espressi in timestamp
e chiami la pagina /page.php?day=03&month=01&year=2014
prova così
PHP:
<?php
//.......
$gg=(int)$_GET['day'];
$mm=(int)$_GET['month'];
$gg=(int)$_GET['year'];
//trasformi in timestamp
$ini=mktime(0,0,0,$mm,$gg,$aa);//ore 0:0:0 del $gg/$mm/$aa
$fin=mktime(23,59,59,$mm,$gg,$aa)+(24*60*60);// mezzanotte del  $gg+1/$mm/$aa
$query="SELECT * FROM events WHERE inizio >=$ini AND fine <= $fin";
//.....
?>

Ciao grazie per la risposta!
In realtà ho provato questo precedentemente... il fatto è che questa query restituisce sono gli eventi che iniziano e si concludono nello stesso giorno!
Se quindi volessi selezionare anche eventi cominciati ieri e che terminano oggi la query non li seleionerebbe :S
 

danielloantonio

Utente Attivo
20 Lug 2012
110
0
0
Spremendo un po' le meningi ho fatto questa query:

Codice:
SELECT * FROM calendar WHERE ((inizio <= '$start' AND fine <= '$end') OR ('$start' <= fine <= '$end') OR ('$start' <= inizio <= '$end'))

dove $start e oggi alle 00:00:01 e $end è oggi alle 23:59:59
.... seleziona sia eventi che iniziano e si concludono oggi, sia quelli che cominciano oggi, sia quelli che finiscono oggi!
Tuttavia rimane il problema: se un evento comincia il 02 e finisce il 04... dal calendario sarà possibile vederlo il 2 ed il 4 ma non il 3...!
 

danielloantonio

Utente Attivo
20 Lug 2012
110
0
0
Spremendo un po' le meningi ho fatto questa query:

Codice:
SELECT * FROM calendar WHERE ((inizio <= '$start' AND fine <= '$end') OR ('$start' <= fine <= '$end') OR ('$start' <= inizio <= '$end'))

dove $start e oggi alle 00:00:01 e $end è oggi alle 23:59:59
.... seleziona sia eventi che iniziano e si concludono oggi, sia quelli che cominciano oggi, sia quelli che finiscono oggi!
Tuttavia rimane il problema: se un evento comincia il 02 e finisce il 04... dal calendario sarà possibile vederlo il 2 ed il 4 ma non il 3...!

No ok, forse mi sto rincoglionendo io ma questa query mi fa vedere l'evento in tutti i giorni del calendario indipendentemente da quando inizia e finisce :incazz2:
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Ok allora, mi puoi indicare un valore tipo archiviato in inizio e fine ?
Inoltre mi puoi dire se i campi sono definiti come timestamp, int, o varchar ?
 

danielloantonio

Utente Attivo
20 Lug 2012
110
0
0
Ok allora, mi puoi indicare un valore tipo archiviato in inizio e fine ?
Inoltre mi puoi dire se i campi sono definiti come timestamp, int, o varchar ?

Si allora i campi sono INT con lunghezza di 20 anche se non penso sia importante! Ho solo un record nel database che ha come timestamp di inizio 1388690296 che sarebbe ieri alle 07:18 e come fine 1388743808 cioè oggi alle 10:10 :D
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Int arriva a 10 come range massimo.

In ogni caso ho creato una tabella d'esempio:
Codice:
CREATE TABLE `events` (
	`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
	`inizio` INT(10) UNSIGNED NOT NULL,
	`fine` INT(10) UNSIGNED NOT NULL,
	PRIMARY KEY (`id`)
);

-- Dump dei dati
INSERT INTO `events` (`id`, `inizio`, `fine`) VALUES
	(1, 1388690296, 1388743808),
	(2, 0, 0),
	(3, 1388690296, 1388823808);


Ed ho eseguito questa query:
Codice:
SELECT * FROM events WHERE (DATE(NOW()) BETWEEN DATE(FROM_UNIXTIME(start)) AND DATE(FROM_UNIXTIME(end)))

Mi vengono pescati giustamente il primo e il terzo record.
Se provo a dargli DATE_ADD(NOW(), INTERVAL 1 DAY) (ovvero, la data di domani) al posto di NOW() mi ritorna solo il terzo record, come previsto.

In sostanza dalle mie prove risulta tutto corretto.
 

danielloantonio

Utente Attivo
20 Lug 2012
110
0
0
Int arriva a 10 come range massimo.

In ogni caso ho creato una tabella d'esempio:
Codice:
CREATE TABLE `events` (
	`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
	`inizio` INT(10) UNSIGNED NOT NULL,
	`fine` INT(10) UNSIGNED NOT NULL,
	PRIMARY KEY (`id`)
);

-- Dump dei dati
INSERT INTO `events` (`id`, `inizio`, `fine`) VALUES
	(1, 1388690296, 1388743808),
	(2, 0, 0),
	(3, 1388690296, 1388823808);


Ed ho eseguito questa query:
Codice:
SELECT * FROM events WHERE (DATE(NOW()) BETWEEN DATE(FROM_UNIXTIME(start)) AND DATE(FROM_UNIXTIME(end)))

Mi vengono pescati giustamente il primo e il terzo record.
Se provo a dargli DATE_ADD(NOW(), INTERVAL 1 DAY) (ovvero, la data di domani) al posto di NOW() mi ritorna solo il terzo record, come previsto.

In sostanza dalle mie prove risulta tutto corretto.

Si scusa in realtà non avevo considerato che il date(now()) mi restituisce sempre le query del giorno di oggi indipendentemente dal giorno passato per il $_GET
solo che se uso
$now = $year.'-'.$month.'-'.$day.' 00:00:01';
e modifico la query in
Codice:
SELECT * FROM events WHERE ($now BETWEEN DATE(FROM_UNIXTIME(start)) AND DATE(FROM_UNIXTIME(end)))
i risulatati compaiono comunque in tutti i giorni del calendario! Sbaglio forse il formato della variabile $now?

Perche comunque essendo un calendario gli utenti devono avere la possibilità di selezionare il giorno

Grazie per la paziena :S

P.S. scusa ho sbagliato ... se sostituisco date(now()) con $now la query non da addirittura nessun risultato
 
Ultima modifica:

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
C'è un errore anche da parte mia, ho scritto "start" e "end" nella query: dovrebbero essere "inizio" e "fine".
Per adoperare una data dinamicamente come ti serve dovresti definire la tua variabile da php senza ore minuti e secondi, in questo modo:
PHP:
$now = $year .'-'. $month .'-'. $day;

Ed inserirla nella query contornata da apici:
Codice:
SELECT * FROM events WHERE ('$now' BETWEEN DATE(FROM_UNIXTIME(inizio)) AND DATE(FROM_UNIXTIME(fine)))
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per avere il giorno successivo basta che tu modifichi la riga
PHP:
$fin=mktime(23,59,59,$mm,$gg,$aa)+(24*60*60);// mezzanotte del  $gg+1/$mm/$aa
in
PHP:
$fin=mktime(23,59,59,$mm,$gg,$aa)+2*(24*60*60);// mezzanotte del  $gg+2/$mm/$aa

oppure forse dovresti aggiungere dei valori alla querystringa
es.
page.php?day=03&month=01&year=2014&quando=1&intervallo=2
mettendo quando=1 parti il gg prima del 3 1 2014
mettendo intervallo=2 la scadenza è due gg dopo vedendo quelli che scadono il 05 1 2014
PHP:
<?php
//.......
$gg=(int)$_GET['day'];
$mm=(int)$_GET['month'];
$gg=(int)$_GET['year'];
//trasformi in secondi
//non metto tutti gli opportuni controlli sui get e sui risultati, es che non sia $ini > $fin
$da_quando=(int)$_GET['quando'];
$sino_a=(int)$_GET['intervallo'];
$da=-$da_quando*(24*60*60);
$sino=$sino_a*(24*60*60);
//trasformi in timestamp
$ini=mktime(0,0,0,$mm,$gg,$aa)+$da;//ore 0:0:0 del $gg/$mm/$aa
$fin=mktime(23,59,59,$mm,$gg,$aa)+$sino;// mezzanotte del  $gg+1/$mm/$aa
$query="SELECT * FROM events WHERE inizio >=$ini AND fine <= $fin";
//.....
?>
comunque un consiglio: sarebbe meglio che tu usassi il metodo POST partendo da un form di immissione dati
 

danielloantonio

Utente Attivo
20 Lug 2012
110
0
0
Si, ho risolto!
Grazie mille non so quale query strana avrei realizzato io senza il tuo aiuto! :fonzie::fonzie:

Grazie mille ancora :D
 
Discussioni simili
Autore Titolo Forum Risposte Data
A [PHP] Problema query insert [RISOLTO] PHP 14
G [MS Access] Casella combinata & Query [RISOLTO] MS Access 4
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
D [risolto] Problemi di paginazione dei risultati con una determinata query Classic ASP 4
gandalf1959 [risolto] Mostrare a video il risultato di una query con stesso anno e mesi diversi PHP 13
A [RISOLTO] Query per ricerca campo timestamp MySQL 2
F [RISOLTO]Sub query ORDER BY su 2 tabelle PHP 8
A [risolto] aiuto integrazione query per db calcistico MySQL 2
S [RISOLTO]php contare numero delle query PHP 1
L [RISOLTO]Query di controllo. PHP 2
A [RISOLTO]Come generare query dinamica PHP-MYSQL PHP 2
L (risolto) MySQL 0
B getElementById su piu id(Risolto) Javascript 7
L Esercitarsi con Js [RISOLTO] Javascript 4
C [RISOLTO]Inserimento variabile php in input html PHP 20
L risolto visualizzazione e ordinamento dati PHP 1
moustache [RISOLTO] SQL PHP IIS PHP 8
Sergio Unia Ricezione email con destinatari multipli [Risolto] PHP 2
L update tabelle in php mysql [risolto] PHP 6
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [RISOLTO] Stampa a video risultato count in html PHP 13
L [RISOLTO] Eliminare una discussione creata PHP 3
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
M [RISOLTO]Windows media player non mi funziona più su win 10 pro 64 bit Windows e Software 2
C [RISOLTO][PHP] Errore di sintassi PHP 8
IT9-Gpp [RISOLTO] Leggere variabile restituita da success Ajax 3
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
Sergio Unia Recupero dati da una vecchia versione MySql [Risolto] MySQL 4
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [RISOLTO]Inserimento Immagini da pc a MySql PHP 15
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
felino Risolto - [Wordpress][WooCommerce] PayPal Checkout e campi di fatturazione WordPress 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10

Discussioni simili