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.
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)
Vi pare corretto? Fareste diversamente?