• User

    Query con operatore LIKE - funziona in parte :(

    Innanzitutto salve a tutti. E' la prima volta che mi affaccio su questo forum e spero di trovare la soluzione al mio problema.

    Sto realizzando un piccolo motore di ricerca per un sito e uso una query, identica per logica a molti esempi visti in alcuni siti, dove ho la possibilità di fare una ricerca adattando la stessa al numero di parole inserite, ma a me sembra non funzioni perfettamente.

    SELECT * from documenti WHERE descrizione LIKE '%parola1%' AND '%parola2%' AND...

    Se cerco una sola parola, ad esempio FERRARI, la trovo senza problemi. Ma se cerco FERRARI e AEREO, pur essendo nel campo descrizione non me ne trova nessuno! Ma se metto solo AEREO me lo trova...

    Mi spiegate questo comportamento per me anomalo? Allora se ho bisogno di tirare fuori più parole l'AND a che mi serve?

    Uso ACESS e ASP...

    Grazie a quanti mi vorranno illuminare!


  • Super User

    ciao e benvenuto 🙂

    prova così
    SELECT * from documenti WHERE descrizione LIKE '%parola1%' AND descrizione LIKE '%parola2%'


  • User

    mhh...probabilmente ho scritto male io, ma domani proverò in ufficio e vi faccio sapere. Grazie mille per la rapida risposta.


  • Moderatore

    @Rinzi said:

    ciao e benvenuto 🙂

    prova così
    SELECT * from documenti WHERE descrizione LIKE '%parola1%' AND descrizione LIKE '%parola2%'

    Forse sarebbe meglio:

    
    SELECT * from documenti WHERE 
                     descrizione LIKE '%parola1%' **OR** 
                     descrizione LIKE '%parola2%'
    
    

  • User

    Bungiorno a tutti. Stamattina in ufficio ho provato i vostri suggerimenti, ma purtroppo la cosa non cambia. Riesco ad ottenere un risultato solo e soltanto se metto una sola parola presente, se ne metto due non mi viene fuori nulla.

    Ho provato anche con OR...ma il discorso non cambia.

    *Se cerco la parola "house" e la parola è presente nel mdb ricavo questo:
    *
    SELECT * FROM documenti WHERE descrizione LIKE '%medici%' ORDER BY doc_id

    **1
    House, il medico d'oro
    www.house.it

    ***Se scrivo la parola "house" e "fantascienza" parola presente nel db ottengo questo ma senza alcun risultato

    **SELECT * FROM documenti WHERE descrizione LIKE '%house %' AND descrizione LIKE '%fantascienza%' ORDER BY doc_id

    **Se scrivo la parola "fantascienza" nel db ottengo questo:

    **SELECT * FROM documenti WHERE descrizione LIKE '%fantascienza%' ORDER BY doc_id

    *2
    Galactica ritorna i cult anni 80
    www.galactica.it

    **4
    L'uomo bionico e la donna bionica
    www.bionico.net

    **Tutto questo con l'operatore AND. Se uso l'operatore OR me ne trova o una o l'altra e non tutte insieme (che è il mio obiettivo).

    ...!


  • User

    ...in teoria con AND dovrebbero uscirmi fuori tutti i record trovati che nella descrizione hanno "house" e "fantascienza"...o no?


  • Super User

    Si, però quelli che li hanno entrambi! Dai risultati che hai dato non mi smebra che ci sia una descrizione con house e fantascienza insieme, o no?
    Come suggerito prima, se vuoi quelli chehanno O house O fantascienza devi usare OR invece di AND, se invece vuoi quelli che li hanno entrambi, va bene usare AND, ma poi non stupirti se gli dai due termini che non hanno inente a che fare tra loro e poi non trovi niente!


  • User

    ...mhh, credo proprio che hai ragione.

    Ho provato ed effettivamente mi escono fuori solo quelli che li contengono entrambi.

    Quindi se voglio cercare 2 parole che sono contenuti su due record diversi devo devo procedere in altra maniera...

    Scusate ma non sono molto esperto, sto cercando di imparare :arrabbiato:


  • Super User

    @spyro70 said:

    ...mhh, credo proprio che hai ragione.

    Ho provato ed effettivamente mi escono fuori solo quelli che li contengono entrambi.

    Quindi se voglio cercare 2 parole che sono contenuti su due record diversi devo devo procedere in altra maniera...

    Scusate ma non sono molto esperto, sto cercando di imparare :arrabbiato:

    Immaginavo!
    Comunque no problem, per fare quello che vuooi tu devi usare OR al posto di AND come detto! Dai una ripassatina alla logica binaria, è semplicissima ma fondamentale!

    Ciao!


  • User

    Grazie,
    sto già ripassando (o meglio studiando) la logica binaria.

    Posto il link qui di una paginetta interessante, magari se in futuro qualcuno ne avrà bisogno saprà dove cercare:

    **LOGICA BINARIA

    **Con OR ho comunque risolto, mi sembra di capire.

    Quindi ricapitolando...se uso AND ottengo solo le informazioni se AND viene soddisfatto (TRUE) - cioè se le due parole cercate sono presenti contemporaneamente nello stesso record. Naturalmente se una o l'altra è presente, otterrò un FALSE...dico bene?

    Prossimo obiettivo...la paginazione...ahi!


  • Super User

    Si ma in questo caso non ottieni true o false.
    Praticamente è come se facesse le due query distinte, e poi dei due insiemi di risultati facesse l'intersezione, quindi restituisce solo i valori presenti in entrambi gli insiemi, cioè quelli ad esempio che contengono SIA Ferrari SIA Aereo.
    Invece con OR fa l'unione, quindi restituisce quelli che contengono O FErrari O Aereo. Comunque la logica che dici riguardo al true e false riguardo agli operatori binari è giusta!
    Spero di essere stato di aiuto!

    Ciao!


  • User

    Bene...adesso ho chiaro il concetto... 🙂

    Che dirti grazie ancora per l'ennesima info. Spero di trovare altro aiuto in seguito perchè con la programmazione ne ho proprio bisogno! :fumato:


  • Super User

    Nel forum c'è sempre qualcuno che ti aiuta!

    Ciao e buona programmazione!