Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 29-03-11, 19:22   #1 (permalink)
User Newbie
 
L'avatar di kurtis86
 
Data di registrazione: Mar 2011
Ubicazione: Bari
Messaggi: 4
Unhappy Un consiglio per una query

Ciao a tutti!
Ho bisogno di un consiglio per quanto riguarda una query, non sto proprio riuscendo a venirne a capo...

Ho una tabella eventi contenente vari campi, tra cui data_inizio e data_fine, di tipo DATETIME, contenenti data e ora di inizio e data e ora di fine di un determinato evento.

Attualmente, per selezionare gli eventi in base a una particolare data, utilizzo questa query:
Codice:
SELECT * FROM eventi WHERE DATE_FORMAT(<data_corrente>,'%Y-%m-%d') = DATE_FORMAT(data_inizio,'%Y-%m-%d');
In questo modo riesco a raccogliere tutti gli eventi che iniziano tra la mezzanotte della data immessa e fino alle 23:59 della stessa.
Tutto questo sarebbe perfetto se tutti gli eventi terminassero in giornata o nelle prime ore del giorno dopo (es, se terminano alle 2:00, appartengono comunque al giorno precedente, quindi il problema non si pone): purtroppo ci sono alcuni eventi periodici (es fiere, settimane speciali, ecc...) in cui l'evento dovrebbe comparire per ogni giorno che compone.

Ho provato con una variante,
Codice:
SELECT * FROM eventi WHERE DATE_FORMAT('<data_corrente>','%Y-%m-%d') BETWEEN data_inizio AND data_fine;
che non va bene, perché mi restituisce anche gli eventi del giorno precedente che terminano dopo la mezzanotte.

Sapete consigliarmi qualche impostazione alternativa per la query? Ora come ora sono a corto di ispirazione

Grazie!
kurtis86 non in linea   Rispondi citando
Vecchio 08-04-11, 10:31   #2 (permalink)
User
 
Data di registrazione: Oct 2006
Messaggi: 287
Invia un messaggio tramite Skype a mikslap
Un idea potrebbe essere quella di trasformare la data DATETIME in TIMESTAMP.
Così facendo tutti gli eventi si visualizzeranno fino all'ora del giorno stabilito confrontando il TIMESTAMP del database col TIMESTAMP della data attuale del server.
Spero sia stato chiaro altrimenti fatti risentire.
mikslap non in linea   Rispondi citando
Vecchio 11-04-11, 18:18   #3 (permalink)
User Newbie
 
L'avatar di kurtis86
 
Data di registrazione: Mar 2011
Ubicazione: Bari
Messaggi: 4
Grazie per il consiglio, al momento ho risolto in un modo differente,
creando due view, eventi_periodici ed eventi_singoli: la prima raccoglie tutti gli eventi che durano più di 24 ore, la seconda invece raccoglie gli eventi aventi durata inferiore alle 24 ore.
In questo modo, per ogni giorno, effettuo una UNION tra due interrogazioni: la prima sulla vista eventi_periodici
Codice:
SELECT * FROM eventi_periodici WHERE DATE_FORMAT('<data_corrente>','%Y-%m-%d') BETWEEN data_inizio AND data_fine;
e la seconda sulla vista eventi_singoli
Codice:
SELECT * FROM eventi_singoli WHERE DATE_FORMAT(<data_corrente>,'%Y-%m-%d') = DATE_FORMAT(data_inizio,'%Y-%m-%d');
Più avanti ho apportato un'ulteriore miglioria: ho aggiunto un campo booleano periodico alla tabella eventi, così da ridurre la mole di calcoli da fare, riga per riga per calcolare la differenza tra data_fine e data_inizio. Ora mi va più che bene!
kurtis86 non in linea   Rispondi citando
Vecchio 11-04-11, 18:50   #4 (permalink)
Ricercatore
 
L'avatar di Magicale
 
Data di registrazione: Feb 2009
Messaggi: 333
Ciao,
Quote:
SELECT * FROM eventi WHERE DATE_FORMAT('<data_corrente>','%Y-%m-%d') BETWEEN data_inizio AND data_fine;
dovendo "filtrare" anche in funzione della'ora, perchè la "data_corrente" è formattata solo con anno,mese e giorno?
Codice:
SELECT * FROM eventi WHERE DATE_FORMAT('<data_corrente>','%Y-%m-%d %h:%i:%s') BETWEEN data_inizio AND data_fine;
Poi... se la query deve essere eseguita per selezionare in funzione non di una data specifica, ma della data corrente, puoi utilizzare la funzione NOW() che è molto più comoda:
Codice:
SELECT * FROM eventi WHERE NOW() BETWEEN data_inizio AND data_fine;
__________________

Webmaster SEO
Magicale non in linea   Rispondi citando
Vecchio 11-04-11, 19:02   #5 (permalink)
User Newbie
 
L'avatar di kurtis86
 
Data di registrazione: Mar 2011
Ubicazione: Bari
Messaggi: 4
Quote:
Magicale Visualizza il messaggio
Ciao,
dovendo "filtrare" anche in funzione della'ora, perchè la "data_corrente" è formattata solo con anno,mese e giorno?
In realtà, nel caso che sto adottando nel caso di eventi singoli, non è più rilevante l'ora, in quanto utilizzo come riferimento la sola data d'inizio (ad essere interrogata è ora la vista eventi_singoli, i cui eventi so per certo avere una durata inferiore alle 24 ore).

Quote:
Poi... se la query deve essere eseguita per selezionare in funzione non di una data specifica, ma della data corrente, puoi utilizzare la funzione NOW() che è molto più comoda:
Concordo, ma non è applicabile al mio caso, perchè la data nella query può cambiare in continuazione: a livello di interfaccia ho un calendario; al caricamento della pagina viene eseguita la query fornendo la data corrente, mentre nel caso in cui venga selezionato un giorno diverso del calendario, la data fornita sarà quella del giorno selezionato.

In realtà la "data_corrente" specificata nella query, è la data in base alla quale bisogna fare la ricerca, quindi non necessariamente la data corrente.
kurtis86 non in linea   Rispondi citando
Rispondi
Tags: , , , ,



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 15:31.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.