Ciao a tutti, ho un problema con una query di ricerca in un database mysql.
Cerco di spiegarmi: voglio effettuare una ricerca su una tabella 'interagente' andando a ricarcare per nome e cognome.
Però ho un solo campo nel form di ricerca e tale vorrei mantenere.
Dato che è possibile che si inseriscano sul campo di ricerca sia nome che cognome separati da uno spazio, ho creato uno script che mi modifica la query in questo modo:
$q6="SELECT distinct nome, cognome, cellulare, indirizzo, citta, telefono";
$q6.=", fax, mail, id FROM interagente WHERE interagente.Key_tipo = 1 and (nome like '%";
$key=$_REQUEST['search'];
$sost = "%' or nome like '%";
$sost2 = "%' or cognome like '%";
$key2=str_replace(' ', $sost, $key);
$key3=str_replace(' ', $sost2, $key);
$q6.=$key2."%'";
$q6.=" or cognome like '%".$key3."%')";
in questo modo in pratica se uno inserisce due parole, le faccio cercare entrambe su tutti e due i campi (nome e cognome) e mi restituisce tutti gli interagenti che hanno o il nome o il cognome, almeno uno dei due, uguale a una delle parole inserite.
la query viene cosi:
SELECT distinct nome, cognome, cellulare, indirizzo, citta, telefono, fax, mail, id FROM interagente WHERE interagente.Key_tipo = 1 and (nome like '%parola1%' or nome like '%parola2%' or cognome like '%parola1%' or cognome like '%parola2%')
però se io sul campo di ricerca scrivo nome e cognome, e c'è un utente che corrisponde esattamente, non mi viene fuori solo lui, ma anche tutti quelli che hanno lo stesso nome ( e cognome diverso) o stesso cognome (e nome diverso).
allora ho pensato di creare una query simile:
SELECT distinct nome, cognome, cellulare, indirizzo, citta, telefono, fax, mail, id FROM interagente WHERE interagente.Key_tipo = 1 and (nome like '%parola1%' or nome like '%parola2%') and (cognome like '%parola1%' or cognome like '%parola2%')
questa funziona esattamente se inserisco due parole, ma se inserisco una sola parola, o nome o cognome, viene cosi:
SELECT distinct nome, cognome, cellulare, indirizzo, citta, telefono, fax, mail, id FROM interagente WHERE interagente.Key_tipo = 1 and (nome like '%parola%' ) and ( cognome like '%parola%')
e giustamente non tira fuori nessun risultato valido.
come posso risolvere?