Vedo che una risposta l'hai gia' avuta.... anche il list in tre campi fissi... potrebbe non funzionare sempre nel caso tu abbia solo due od 1 dato.

Vediamo se ho capito e cosa farei personalmente.

Tu hai un form che dato una "data" o parte di essa tu devi estrarre con questa i record corrispondenti nella tabella del db.

Se cosi' fosse per prima cosa devi normalizzare la data ricevuta. Intanto suddividerei la data in tre campi giorno-mese-anno con un esempio del formato che voglio ricevere con un value di default = 00-00-0000. Poi la componi tu per la querystring come ti pare anche direttamente nel formato ansi previsto da mysql

Dopo di che estratta la data la scomponi in tre variabili ($giorno, $mese, $anno) e la validi, se completa, con checkdate($mese, $giorno,$anno). La validazione va sempre fatta in php oppure controllata se nel range ammesso con JS.

ora con tre if controlli i campi e completi la data nel formato previsto per la query.
codice:
if($giorno == 00) $giorno = '__';  // 2 underscore 
if(mese == 00) $mese = = '__';
if($anno == 0000) $anno = '____'; // 4 undescore

$data_sql =  "$anno-$mese-$giorno";

select *, date_format(campo_data, '%d-%m-%Y') as data_it
from tabella
where campo_data like '$data_sql'
order by campo_data [asc|desc]
Lo si puo' fare comunque in diversi altri modi. personalmente pero' farei cosi'.