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

    [php, mysql] modulo cerca..

    ho fatto un modulo cerca per un portale,
    dove inserire prodotti..
    un form in html col metodo post invia
    la variabile term..

    quindi la mia query è la seguente:

    $search = mysql_query("SELECT * FROM prodotti WHERE nome LIKE '%$term%'" );

    con term uguale a :
    $term = $_POST['term'];

    ora se io inserisco
    sul form una lettera qualsiasi tipo
    "a" mi escono tutti i prodotti inizianti per a..
    c'è 1 modo x restringere la ricerca??..
    ovvero se metto:
    "c" non mi esce nulla
    a differenza di "cloro" che mi esce
    il prodotto cloro??..

    grazie 1000

  2. #2

    Re: [php, mysql] modulo cerca..

    Originariamente inviato da googledork
    ovvero se metto:
    "c" non mi esce nulla
    a differenza di "cloro" che mi esce
    il prodotto cloro??..
    Potresti essere + chiaro nell'esporre il concetto? Non tanto si capisce!

  3. #3
    vorrei in poche parole restringere il
    campo di ricerca..
    ovvero se inserisco la lettera "c"
    non mi escano risultati,
    e se inserisco una parola esistente al database
    me la visualizzi..

    ad esempio:
    il mio db contine la parola cloro

    inserisco c e mi dà come risultato 0.
    inserisco cloro e mi dà come risultato esistente..

    la mia query è troppo generale..
    come posso aggiustarla??

  4. #4
    Sinceramente non so se sono in grado di aiutarti.
    Così come hai impostato la ricerca non penso possa fare molto per migliorare la situazione. Infatti avevo pensato che al limite potresti imporre che la parola da ricercare deve avere minimo un tot. di caratteri, ma non penso sia una cosa sensata.

    Se il nome del prodotto è composto da una sola parola allora al posto di LIKE usa =
    Nel caso in cui il nome del prodotto sia composto da + parole mi è venuta un'idea. Te la butto lì, non so se può esserti utile.
    Io farei in tal modo. Anziché fare la ricerca sulla tabella prodotti, mi creerei una tabella di appoggio che contenga tutte le parole possibili da ricercare. Mi spiego meglio.

    Supponiamo che la tabella prodotti contenga i seguenti campi:

    id_prodotto nome descrizione ...........

    io creerei la tabella parole con i campi:

    parola id_prodotto

    con ambedue i campi chiave primaria ed una relazione esterna tra id_prodotto della tabella prodotti e id_prodotto della tabella parole.

    Ogni qualvolta inserisci un nuovo prodotto prendi tutte le parole differenti di cui si compone il nome del prodotto e mettile nella tabella parole tenendo traccia per ogni parola del prodotto a cui fanno riferimento.

    Es: nome prodotto: Video LCD Samsung

    inseriamo il prodotto nella tabella prodotti, la quale ti restituisce come id_prodotto 50 (sto supponendo che id_prodotto sia di tipo autoincrement).
    A questo punto inserisci nella tabella parole i 3 record:

    Video 50
    LCD 50
    Samsung 50

    In tal modo quando devi fare una ricerca la fai sulla tabella parole e non usando LIKE ma =, cioè:

    $search = mysql_query("SELECT * FROM parole WHERE parola=$term" );

    Potresti osservare: bastava fare la seguente ricerca su prodotti

    $search = mysql_query("SELECT * FROM parole WHERE LOCATE($term, nome)<>0");

    così ci si risparmiava la tabella parole.
    Il problema, però, è che il comando LOCATE o simili trovano la prima occorrenza di $term nel campo nome.

    Quindi se $term = 'c';

    la ricerca dà esito positivo anche per Cloro, Carburante........

    Non so se ti sono stato di aiuto.

    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.