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

    query di ricerca a chiave "variabile"


    Dovrei fare una query di ricerca a chiave "variabile".
    Cosa intendo:
    ------------------------------------------------
    Chiave: bottiglia

    risultato da ottenere:
    - bottiglia
    - bottiglie
    - bottiglietta
    - bottiglione
    - botte
    - ...
    ------------------------------------------------
    Attualmente utilizzo un LIKE vincolando l'utente a dover scrivere 'bott' per avere i risultati sopra citati.
    ------------------------------------------------
    Sto invece cercando di capire come ottenere la stessa cosa anche se l'utente digita 'bottiglia'
    ------------------------------------------------

    Pensavo ad una cosa del genere
    Creare una funzione che data una parola la scompone ed aggiunge "casi":
    Es.
    Parola: chiave
    funzione ---> chi, chia, chiave, chiavei, chiavi, chiavette, chiavetta, chiava, chiavo, etc...
    query = WHERE CAMPO LIKE '%chi%' or campo like '%chia%' etc...
    ------------------------------------------------
    Mi sa però che c'è un altissimo rischio di restituire risultati non a tema
    ------------------------------------------------

  2. #2
    Non è quello che hai chiesto ma
    Hai mai pensato di attribuire delle categorie alle varie parole?

    es. contenitori_bevande

    quando l'utente sceglie quella categoria appaiono tutti
    - bottiglia
    - bottiglie
    - bottiglietta
    - bottiglione
    - botte

    ma non bottone...

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Ovviamente non potrai fargli capire il "tema" se non aggiungendo un campo categoria, ma quello che vuoi fare per il resto è semplice.

    Prendi la chiave di ricerca, ad esempio "bottiglia" e la scomponi con substr() mettendo le varie sottochiavi in un array
    Codice PHP:
    $chiave "bottiglia";
    $chiavi = array();
    for (
    $i=2$i<strlen($chiave); $i++) {
        
    $chiavi[] = substr($chiave,0,$i);
    }
    // $chiavi conterrà: bot, bott, botti, bottig, bottigl, bottigli, bottiglia

    //Ora costruisci la parte WHERE della query
    $where "";
    foreach(
    $chiavi as $valore)
        
    $where .= "campo LIKE '%" $valore "%' OR ";
    $where substr($where,0,strlen($where)-4); //rimuove l'ultimo OR che alla fine non serve

    //infine la query
    $query "SELECT DISTINCT campo FROM tabella WHERE " $where
    EDIT: mi ero dimenticato di farlo col LIKE.

  4. #4

    Grazie 1000 Alhazred sei stato gentilissimo a scrivere anche il codice, non chiedevo così tanto .

    Come pensavo la struttura rende l'approssimazione della query e ovviamente estra anche gli articoli non inerenti al campo cercato.
    es:
    bottiglia
    -ok per bottiglia, bottiglie, botte etc...
    ma estra anche roBOT

    ovviamente per rendere la query un attimo + precisina basta evitare la partenza da $I=2 e portarlo a 3 o 4 etc..

    Grazie ancora
    Alhazred

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.