![]() |
![]() |
|
| Condividi questo contenuto nei Social Network: |
|
Tweet |
|
|
|
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. |
||||
|
|||||||||
|
|
LinkBack | Strumenti di discussione |
|
|
#1 (permalink) |
|
User Newbie
Data di registrazione: Mar 2011
Ubicazione: Bari
Messaggi: 4
|
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'); 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;
Sapete consigliarmi qualche impostazione alternativa per la query? Ora come ora sono a corto di ispirazione ![]() Grazie! |
|
|
|
|
|
|
|
#2 (permalink) |
|
User
|
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. |
|
|
|
|
|
#3 (permalink) |
|
User Newbie
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;
Codice:
SELECT * FROM eventi_singoli WHERE DATE_FORMAT(<data_corrente>,'%Y-%m-%d') = DATE_FORMAT(data_inizio,'%Y-%m-%d'); |
|
|
|
|
|
#4 (permalink) | |
|
Ricercatore
Data di registrazione: Feb 2009
Messaggi: 333
|
Ciao,
Quote:
Codice:
SELECT * FROM eventi WHERE DATE_FORMAT('<data_corrente>','%Y-%m-%d %h:%i:%s') BETWEEN data_inizio AND data_fine;
Codice:
SELECT * FROM eventi WHERE NOW() BETWEEN data_inizio AND data_fine; | |
|
|
|
|
|
#5 (permalink) | ||
|
User Newbie
Data di registrazione: Mar 2011
Ubicazione: Bari
Messaggi: 4
|
Quote:
Quote:
In realtà la "data_corrente" specificata nella query, è la data in base alla quale bisogna fare la ricerca, quindi non necessariamente la data corrente. | ||
|
|
|