Se ho capito bene dovrebbe essere una cosa di questo tipo....
$query = "";
/* costruisco la query se almeno una condizione è valorizzata */
if(!empty($ricerca1) || !empty($ricerca2) || !empty($ricerca3))
{
/*
N.B. la prima condizione 1=1 è sempre vera, nella costruzione dinamica
delle query, serve per non doversi preoccupare se mettere o meno il
primo AND
*/
$query = "select [campi] from [tabella] where 1=1";
if(!empty($ricerca1))
$query = $query." AND campo1 = ".$ricerca1;
if(!empty($ricerca2))
$query = $query." AND campo2 = ".$ricerca2;
if(!empty($ricerca3))
$query = $query." AND campo3 = ".$ricerca3;
/* Eseguo la query */
}
In questo modo le condizioni della query vengono create solo in base alla presenza di ogni singolo valore (se il valore non c'è la condizione non viene aggiunta).
Per il campo2 non ho capito cosa intendi, per effettuare una ricerca in range bisogna avere due valori, min e max (es. ricerca2_min e ricerca2_max):
e di solito la query si crea così:
if(!empty($ricerca2_min))
$query = $query." AND campo2 >= ".$ricerca2_min;
if(!empty($ricerca2_max))
$query = $query." AND campo2 <= ".$ricerca2_max;
in questo modo ci sono 3 condizioni:
1) ricerca2_min è valorizzato, ricerca2_max no:
il campo2 deve essere maggiore o uguale a ricerca2_min.
2) ricerca2_max è valorizzato, ricerca2_min no:
il campo2 deve essere minore o uguale a ricerca2_max.
3) sono valorizzati entrambi:
il campo2 deve essere un valore tra ricerca2_min e ricerca2_max compresi.
E' questo che intendevi?
"Vuoi rendere impossibile per chiunque opprimere un suo simile? Allora, assicurati che nessuno possa possedere il Potere."
- M. Bakunin -