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

    Ricerca fulltext, sto impazzendo, chiedo consiglio agli esperti

    La situazione è questa, ho una tabella fatta così.

    id, nome, cognome, indirizzo, città, telefono, email

    tutti i campi tranne id sono campi varchar, ora ho questa necessità,
    ho creato un piccolo form dove ho messo degli input per il nome, cognome, indirizzo, città, felefono e email, e questo form mi permette in pratica di gestire una ricerca multipla si questa tabella. Esempio voglio cercare i nome che iniziano per mor, con il cognome che inizia per abr, e con il numero di telefono che inizia per 335.

    Da quello che ho letto in giro (sono alle prime armi quindi ne so molto poco) bisogna che creo degli indici fulltext per ogni campo del quale voglio fare una ricerca, quindi ho provveduto a modificare la mia tabella tramite

    ALTER TABLE an_abbonati ADD FULLTEXT nometext (nome)
    ALTER TABLE an_abbonati ADD FULLTEXT cognometext (cognome)
    ecc ecc.

    Ora il problema e il consiglio che cerco è nell'implementazione di una ricerca fatta come ho spiegato sopra. Mi hanno detto che sarebbe meglio fare una cosa di questo tipo

    (SELECT nome,cognome FROM an_abbonati WHERE MATCH (nome) AGAINST('mor*' IN BOOLEAN MODE)) UNION (SELECT nome,cognome FROM an_abbonati WHERE MATCH (cognome) AGAINST('abr*' IN BOOLEAN MODE))

    però il risultato non è quello sperato, come posso risolvere la situazione per favore ?
    Altra cosa, come posso costruire la query in php facendo i controlli sui campi del form che l'utente può compilare ???? Tramite una serie di controlli If ? if (!empty($_post[nome])) ecc ...
    Può funzionare in questo modo o ci sono vie migliori secondo voi ??
    Grazie a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    troppa grazia! Bastava "LIKE"

    SELECT * FROM tabella WHERE nome LIKE "mor%" AND cognome LIKE "abr%" AND telefono LIKE "335%"
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3

    Re: Ricerca fulltext, sto impazzendo, chiedo consiglio agli esperti

    Originariamente inviato da Violence77
    La situazione è questa, ho una tabella fatta così.

    id, nome, cognome, indirizzo, città, telefono, email

    tutti i campi tranne id sono campi varchar, ora ho questa necessità,
    ho creato un piccolo form dove ho messo degli input per il nome, cognome, indirizzo, città, felefono e email, e questo form mi permette in pratica di gestire una ricerca multipla si questa tabella. Esempio voglio cercare i nome che iniziano per mor, con il cognome che inizia per abr, e con il numero di telefono che inizia per 335.

    Da quello che ho letto in giro (sono alle prime armi quindi ne so molto poco) bisogna che creo degli indici fulltext per ogni campo del quale voglio fare una ricerca, quindi ho provveduto a modificare la mia tabella tramite

    ALTER TABLE an_abbonati ADD FULLTEXT nometext (nome)
    ALTER TABLE an_abbonati ADD FULLTEXT cognometext (cognome)
    ecc ecc.

    Ora il problema e il consiglio che cerco è nell'implementazione di una ricerca fatta come ho spiegato sopra. Mi hanno detto che sarebbe meglio fare una cosa di questo tipo

    (SELECT nome,cognome FROM an_abbonati WHERE MATCH (nome) AGAINST('mor*' IN BOOLEAN MODE)) UNION (SELECT nome,cognome FROM an_abbonati WHERE MATCH (cognome) AGAINST('abr*' IN BOOLEAN MODE))

    però il risultato non è quello sperato, come posso risolvere la situazione per favore ?
    Altra cosa, come posso costruire la query in php facendo i controlli sui campi del form che l'utente può compilare ???? Tramite una serie di controlli If ? if (!empty($_post[nome])) ecc ...
    Può funzionare in questo modo o ci sono vie migliori secondo voi ??
    Grazie a tutti
    "AGAINST('mor*'" perchè hai aggiunto l'asterisco? L'uso del fulltext evita proprio quello

    Supponendo che tu abbia la tabella "news" con i campi "id","nome","testo" dove nome e testo hanno la key FULLTEXT, puoi usare questa query per la ricerca:
    Codice PHP:
    $query $_POST['query'];
    $results $_POST['max_results'];
    "SELECT * FROM news WHERE MATCH(nome,testo) AGAINST('$query' IN BOOLEAN MODE) ORDER BY id DESC LIMIT $results

  4. #4
    Prima di tutto grazie per le risposte ma ci sto ancora sbattendo la testa sopra, allora per Andrea, visto che sono ignorante e non ho capito bene ti chiedo di darmi una mano a capire. Che differenza c'è tra il comando Like e la ricerca tramite il fulltext e perchè mi sono andato a complicare così tanto la vita ?.
    Per mem invece ho un altra domanda,
    Codice PHP:
    WHERE MATCH(nome,testo
    questo codice prevede che io non abbia due indici fulltext separati vero ? Allora perchè mi hanno suggerito di fare degli indici fulltext separati per ogni campo varchar di cui volevo fare ricerche ?
    Purtroppo non ci capisco un gran che e son davvero in confusione, tra manuali e esempi vari credo che sto andando per patate, chiedo illuminazione
    Avete letto per il discorso Form ? E' corretto il metodo di impostazione del modulo di ricerca così fatto o avete dei suggerimenti migliori ?? Grazie a tutti !

  5. #5
    E' un buon metodo per un sistema di ricerca medio-avanzato, ma come in tutti i casi di questo genere anche il più difficile.
    I key FULLTEXT li aggiungo sempre in modo "aggregato"

  6. #6
    Mi spieghi un po' meglio cosa intendi per modo aggregato e come potrei implementarlo in questa piccola applicazione per favore ? Ti ringrazio per la cortesia e la pazienza

  7. #7
    match ... against va bene per una ricerca full text. in altre parole trovare all'interno di un testo delle corrispondenze alle parole previste. Con un mucchio di limitazioni tra cui le principali sono la lunghezza della parola inserita e la presenza di quella parola tra quelle troppo comuni di cui esiste un elenco nel server, il numero dei record trovati.

    Per cercare nome e cognome usa il LIKE anche perche' si presume che non necessiti un campo text da 64k cadauno per ospitarli. Quindi campo varchar(50) basta e avanza, a meno che tu non debba ospitare un nobile spagnolo (antico).

    Segui il suggerimento di andrea1979.....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Infatti ho provato grazie al vostro consiglio e a quello di Andrea e il suo dovere la fa la query, ora domando una cosa, quindi è più conveniente usare un fulltext tipo se dovessi cercare parole in post e titoli di post ad esempio vero ? In quel caso non potrei usare Like giusto ? Vi ringrazio molto per avermi aiutato a capire un po' meglio questi comandi. Chiedo un ultima cosa, ho visto che ha messo un simbolo % alla fine della stringa da cercare, questo simbolo permette di cercare tutte le parole che iniziano per la stringa A vero ? Grazie ancora a tutti.

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Al di là dell'efficacia delle ricerche full-text (ottime, ben inteso!!! anzi, necessarie), c'è anche da chiedersi dove usarle al meglio... se come faceva notare Piero devi fare la ricerca su un varchar(50), insomma usare la full-text equivarrebbe più o meno a prendere il bolide per andare a gettare l'immondizia dietro l'angolo.

    Il % è il carattere "jolly", un po' come * in DOS, quindi è come hai dedotto tu:

    LIKE an% match andrea, angela, andare ma non banda
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Chiaro, credo di aver capito Se ho problemi mi rifaccio ancora vivo grazie d tutto gentilissimi, ciao !

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 © 2024 vBulletin Solutions, Inc. All rights reserved.