Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Query per motore di ricerca

    Ciao a tutti,

    Sto programmando un motore di ricerca interno per il mio database mysql di articoli. Se cerco una parola all'interno di un campo di testo tipo WHERE `testo` LIKE 'qui' non mi viene restituito niente, evidentemente perchè lui calcola l'intero campo di testo o non so per quale motivo... se invece cerco LIKE '%qui%' allora mi restituisce si i record all'interno del cui campo testo è presente la parola "qui" ma anche quelli nei quali la parola "qui" è parte di un'altra parola, tipo "quindi". Infatti il segno % per mysql dovrebbe essere un equivalente dell'*. Io però in questo motore di ricerca volevo dare proprio la possibilità di trovare separatamente "qui","qui*" o "quindi" direttamente utilizzando all'occorrenza il simbolo *. Come posso fare ?

    Grazie 1000
    SGr33n

  2. #2
    se cerci una determinata parola devi usare

    codice:
    SELECT * FROM tuodatabase WHERE nomecampo = 'parolachecerchi'
    se cerchi "quo" ti trova quo

    se cerchi tutte le parole che contengono quella parola

    codice:
    SELECT * FROM tuodatabase WHERE nomecampo LIKE '%parolachecerchi%'
    se cerchi "quo" ti trova quorum , qui quo qua , equo e non me ne vengono piu'

    oppure

    codice:
    SELECT * FROM tuodatabase WHERE nomecampo LIKE 'parolachecerchi%'
    ti trova tutte le parole che finiscono per quo
    oppure

    codice:
    SELECT * FROM tuodatabase WHERE nomecampo LIKE '%parolachecerchi'
    ti trova tutte le parole che iniziano per quo
    ..: Serie A :..
    ..: FORZA PALERMOOOOoooo.....

  3. #3
    non mi funziona LIKE 'quo' non mi trova niente... infatti sapevo anche io che era così... da cosa potrebbe dipendere ?
    SGr33n

  4. #4
    Ho appena fatto una prova e mi sono accorto che se il testo del messaggio è ad esempio "questo" se cerco like 'questo' allora mi ritorna... se invece il testo è "questo articolo" se cerco like 'questo' non mi ritorna nulla, al contrario se cerco like 'questo%' mi ritorna il record...

    Da cosa potrebbe dipendere ? forse da qualche impostazione del campo mysql ?

    Prove effettuate da PhpMyAdmin

    Grazie
    SGr33n

  5. #5
    Utente di HTML.it L'avatar di jesus
    Registrato dal
    Jan 2002
    Messaggi
    717
    Io con SQL Server ho creato una query per cercare solo le parole intere grazie ad una cosa del genere:
    codice:
    SELECT * 
      FROM tabella
     WHERE campo LIKE '%[ ]parola[ ]%'
    All'interno delle parentesi quadre vanno tutti i caratteri che delimitano una parola ad esempio il punto (.), la virgola (,), lo spazio, ecc...

    Però non so se questo si può fare in mysql.

    Ciao
    <%= Jesus %>
    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna" - Albert Einstein.

  6. #6
    Grazie Jesus, ma è molto strano che non funzioni il like senza %... qualche altro suggerimento ?
    SGr33n

  7. #7
    Utente di HTML.it L'avatar di jesus
    Registrato dal
    Jan 2002
    Messaggi
    717
    Originariamente inviato da SGr33n
    Grazie Jesus, ma è molto strano che non funzioni il like senza %... qualche altro suggerimento ?
    Il comportamento che tu giudichi strano è normalissimo. Infatti l'operatore LIKE consente di effettuare ricerche specificando come parametro un modello. Se all'interno di questo modello non sono presenti caratteri speciali (%, _, ecc...) il LIKE si comporta come l'ooperatore =.
    Quindi se esegui una query del genere:
    codice:
    SELECT * FROM tabella where campo LIKE 'pippo'
    è come se tu eseguissi questa query:
    codice:
    SELECT * FROM tabella where campo = 'pippo'
    Perciò la query ti restituirà i record dove il campo conterrà esattamente e solo la parola pippo.

    Ciao e buon lavoro.
    <%= Jesus %>
    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna" - Albert Einstein.

  8. #8
    Hai xfettamente ragione i simboli/caratteri tra le parentesi quadre sarebbero le regular expressions... io proverò a modificare queste query per aggiungere oltre allo spazio vuoto ogni regolare segno di interpunzione

    ma ancora una cosa... non capisco allora la differenza tra gli operatori = e LIKE
    SGr33n

  9. #9
    Non funziona lo stesso :\ c'è qualcuno ke ha già risolto in pratica questo problema ?
    SGr33n

  10. #10

    Risolto :D

    Risolto

    Per tutti quelli che hanno il mio stesso problema:

    Le piu recenti versioni di mysql non supportano le regular expression con l'operatore LIKE bensì con l'operatore REGEX che già di per se supporta le regular expressions.

    La stringa da usare è:

    codice:
    SELECT * FROM tabella WHERE campo REGEXP '[[:space:]]termine[[:space:]]|[[:space:]]termine$|^termine[[:space:]]'"
    Dunque il carattere | determina un'alternativa... la prima soluzione indica che qualsiasi carattere di spazio preceduto dal termine e successivo allo steso, deve ritornare nella query ([[:space:]]termine[[:space:]]) il secondo indica che deve ritornare nella query anche i campi dove è presente il termine preceduto da un carattere di spazio il tutto alla fine del campo (il simbolo $ determina la fine del campo) al contrario il carattere ^ indica l'inizio del campo e con l'ultima soluzione ritornano i campi in cui all'inizio c'è il termine e successivamente un carattere di spazio... passerò ora a migliorare la query aggiungendo anche i segni di interpunzione.

    Questo è tutto
    SGr33n

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.