Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    8

    [mysql] query di ricerca su piu campi con un solo input

    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?

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Vorrei meglio comprendere:
    Tu dici che:
    1. Se esiste un utente che ha esattamente nome e cognome forniti in input deve estrarre solo quello altrimenti deve estrarre tutti quelli che hanno o il nome o il cognome uguale?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    8
    si, esattamente.

    e mi sa che un modo per risolvere l'ho trovato.

    Prima faccio la query piu stringente: se ottengo risultati, lascio quella. se invece non mi trova nessuno con nome e cognome uguale, allora eseguo l'altra.

    che ne dite può andare?

  4. #4
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Ciao, si se puoi risolvere in più passaggi si, se invece devi fare una unica query la cosa diventa un pò più compicata ma si può fare.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.