Ho una tabella contenente degli eventi.
Questi eventi possono iniziare e finire all'interno dello stesso giorno o durare un qualsiasi periodo di tempo (3 giorni, 2 mesi e 5 giorni, 2 anni...).
Per le date di inizio e fine ho nella tabella i campi "inizio" e "fine" in formato unix timestamp.
Dato un giorno qualsiasi, ad esempio 7 - 12 - 2013 devo recuperare tutti gli eventi in corso questo giorno.
Per la clausola where ho impostato le regole che seguono e sembrano funzionare, ma non sono certo di aver considerato tutti i casi possibili nel modo giusto e non so se magari ci fosse un sistema migliore per ottenere la stessa cosa.
N.B: non posso trasformare la data dal formato gg-mm-aaaa in formato timestamp, altrimenti sarebbe stato facilissimo.
Vi pare corretto? Fareste diversamente?codice://inizio mese = 12 - anno = 2013 //fine mese = 12 - anno = 2013 (DAY(FROM_UNIXTIME(inizio)) <= 7 AND MONTH(FROM_UNIXTIME(inizio)) = 12 AND YEAR(FROM_UNIXTIME(inizio)) = 2013 AND DAY(FROM_UNIXTIME(fine)) >= 7 AND MONTH(FROM_UNIXTIME(fine)) = 12 AND YEAR(FROM_UNIXTIME(fine)) = 2013) //inizio mese = 12 - anno = 2013 //fine mese > 12 - anno = 2013 OR (DAY(FROM_UNIXTIME(inizio)) <= 7 AND MONTH(FROM_UNIXTIME(inizio)) = 12 AND YEAR(FROM_UNIXTIME(inizio)) = 2013 AND MONTH(FROM_UNIXTIME(fine)) > 12 AND YEAR(FROM_UNIXTIME(fine)) = 2013) //inizio mese = 12 - anno = 2013 //fine anno > 2013 OR (DAY(FROM_UNIXTIME(inizio)) <= 7 AND MONTH(FROM_UNIXTIME(inizio)) = 12 AND YEAR(FROM_UNIXTIME(inizio)) = 2013 AND YEAR(FROM_UNIXTIME(fine)) > 2013) //inizio mese < 12 - anno = 2013 //fine mese = 12 - anno = 2013 OR (MONTH(FROM_UNIXTIME(inizio)) < 12 AND YEAR(FROM_UNIXTIME(inizio)) = 2013 AND DAY(FROM_UNIXTIME(fine)) >= 7 AND MONTH(FROM_UNIXTIME(fine)) = 12 AND YEAR(FROM_UNIXTIME(fine)) = 2013) //inizio mese < 12 - anno = 2013 //fine mese > 12 - anno = 2013 OR (MONTH(FROM_UNIXTIME(inizio)) < 12 AND YEAR(FROM_UNIXTIME(inizio)) = 2013 AND MONTH(FROM_UNIXTIME(fine)) > 12 AND YEAR(FROM_UNIXTIME(fine)) = 2013) //inizio mese < 12 - anno = 2013 //fine anno > 2013 OR (MONTH(FROM_UNIXTIME(inizio)) < 12 AND YEAR(FROM_UNIXTIME(inizio)) = 2013 AND YEAR(FROM_UNIXTIME(fine)) > 2013) //inizio anno < 2013 //fine mese = 12 - anno = 2013 OR (YEAR(FROM_UNIXTIME(inizio)) < 2013 AND DAY(FROM_UNIXTIME(fine)) >= 7 AND MONTH(FROM_UNIXTIME(fine)) = 12 AND YEAR(FROM_UNIXTIME(fine)) = 2013) //inizio anno < 2013 //fine mese > 12 - anno = 2013 OR (YEAR(FROM_UNIXTIME(inizio)) < 2013 AND MONTH(FROM_UNIXTIME(fine)) > 12 AND YEAR(FROM_UNIXTIME(fine)) = 2013) //inizio anno < 2013 //fine anno > 2013 OR (YEAR(FROM_UNIXTIME(inizio)) < 2013 AND YEAR(FROM_UNIXTIME(fine)) > 2013)