Hai deciso di mettere le tre colonne separate solo per via di questa ricerca?
Se non hai altri motivi allora potresti prendere in considerazione di usare il campo date di mysql e generare le query in modo adeguato.
Ad esempio
Codice PHP:
//costruisco il giorno per l'inizio dell'intervallo
if($_GET['giorno1'] == null) { //se l'utente non ha scelto il giorno per il giorno iniziale
if($_GET['mese1'] == null) //se non ha scelto neanche il mese
$data1 = $_GET['anno1']."-01-01"; //se all'utente non interessa giorno e mese parto dal 1° gennaio
else //l'utente ha scelto il mese
$data1 = $_GET['anno1']."-".$_GET['mese1']."-01"; //parto dal 1° giorno del mese scelto
}
else { //l'utente ha scelto il giorno iniziale
if($_GET['mese1'] == null) //se non ha scelto il mese
$data1 = $_GET['anno1']."-01-".$_GET['giorno1']; //se all'utente interessa il giorno ma non il mese
else //interessa anche il mese
$data1 = $_GET['anno1']."-".$_GET['mese1']."-".$_GET['giorno1']; //interessa tutto della data
}
/***** costruisci analogamente il giorno di fine intervallo *****/
$query = "SELECT * FROM tabella_con_date WHERE campo_data > ".$data1." AND campo_data < ".$data2;