Ricerca avanzata PHP & MySQL

fabiomenal

Nuovo Utente
20 Mar 2011
5
0
0
Vorrei realizzare una ricerca avanzata con PHP, che preveda l'inserimento potenziale di molti campi ma anche quello minimo di uno solo. Come faccio a scrivere la query di ricerca considerando che molte delle aree di testo della ricerca posson esser vuoti? Ci vuole una lunga serie di if? Vi sarei enormemente grato se mi faceste un esempio.
 

micio86

Utente Attivo
beh

Se i campi son diversi certo ci vogliono gli if....
Tieni conto che per ogni campo che vuoi cercare devi allungare la tua query.
Io solitamente inizio con SELECT * FROM tab_principale (se ci son delle JOIN le faccio con LEFT JOIN) WHERE 1=1 in modo da avere una condizione sempre vera. Poi con gli if aggiungo man mano i miei campi, valore da ricercare e il gioco è fatto.
Stessa cosa per l'ordinamento, solo che invece di aggiungere sostituisco (si potrebbe far meglio per l'ordinamento cmq).
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
si ti servono diversi if, ma non serve tante query operi (es) solo sul where ad es.
PHP:
<?php
//prelevi da vari post il valore dei campi
//poi
$were=" WHERE ";
if($campo_1 !=""){
	$were.=" campo_1= '$campo_1' AND ";//es vuoto
}
if($campo_2 !=""){
	$were.=" campo_2= '$campo_2' AND ";//es = pinco
}
if($campo_3 !=""){
	$were.=" campo_3= '$campo_3' AND ";// es = pallino
}
//ecc.....
//termini con questa
$were.=" 1=1 ";//cioè uno uguale a uno
/*in funzione dei campi vuoti $were conterrà es.
WHERE campo_2='pinco' AND campo_3='pallino' AND 1=1 "
l'istruzione 1=1 ti serve per non dover cercare e togliere l'ultimo AND o se i campi sono
tutti vuoti, se tutti i campi sono vuoti $were risulterà
WHERE 1=1 cioè sempre soddisfatta
poi nella query
*/
$query= "SELECT * FROM mia_tabella $were";
//ecc...
?>
guarda che è solo uno schema che devi adattare alle tue esisgenze
 
Ultima modifica:

micio86

Utente Attivo
Buona!

buona anche qsta io praticamente faccio l'inverso...
WHERE 1=1

if(blabla) {
$query.=" AND blabla='blabla'";
}