Visualizzazione dei risultati da 1 a 8 su 8

Discussione: match and like

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    55

    match and like

    Il campo cosa è un campo testo
    mentre il resto dei campi sono tutte select

    All'inizio avevo fatto una query del genere
    Codice PHP:
    $query_limit mysql_query("SELECT * FROM annunci WHERE ((titolo like '%$cosa%' or testo like '%$cosa%') AND (categoria like '%$categoria%' AND marca like '%$marca_c%' AND regione like '%$region%' AND provincia like '%$city%' AND tipo_annunc like '%$tipo_ric%')) order BY data_insrimento ASC LIMIT $primo$per_page"); 
    Adesso stavo provando con il match e against e tirato fuori questa query

    Codice PHP:
    $query_limit mysql_query("SELECT * FROM annunci WHERE match(titolo,testo) against('*$cosa*' IN BOOLEAN MODE) AND (categoria like '%$categoria%' AND marca like '%$marca_c%' AND regione like '%$region%' AND provincia like '%$city%' AND tipo_annunc like '%$tipo_ric%') order BY data_insrimento ASC LIMIT $primo$per_page"); 
    Non tira fuori nessun risultato,ne errori.
    Presumo che se uso match e against non posso unare più il like,oppure sbaglio qualcosa?


  2. #2
    C'è una pillola del mitico Maurizio che fa al caso tuo.
    LINK

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    55
    E' proprio da quella pillola che ho scoperto il match.
    Se ho un solo cmpo di ricerca '$cosa' funziona bene.
    Però ho più campi di ricerca $cosa - $categoria - $marca_c - $region - $city - $tipo_ric
    tutto questo e' per una pagina annunci
    Esempio:
    nel campo cosa scrivo motore bicilindrico, poi come categoria seleziono auto - come marca seleziono fiat - come region seleziono lazio come city seleziono roma e come tipo_ric seleziono vendo;
    in questo modo ho una ricerca selettiva riferito al campo cosa,cioè vedo se esiste un motore bicilindrico in vendita di marca fiat nel lazio e precisamente a roma, allo stesso tempo vorrei che mi tirasse fuori anche tutti quelli con solo la parola motore.


  4. #4
    Se vogliamo utilizzare MATCH e AGAINST dobbiamo aggiungere un indice fulltext nei campi dove vogliamo poter eseguire le ricerche. L’indice fulltext può essere aggiunto unicamente nei campi di testo (VARCHAR, LONGTEXT, TEXT, ecc…).
    Nella pillola è ben specificato che si deve "segnalare" ogni colonna sulla quale si vuole definire una ricerca match/against.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    55
    appunto nella query che avevo scritto prima

    Codice PHP:
    $query_limit mysql_query("SELECT * FROM annunci WHERE match(titolo,testo) against('*$cosa*' IN BOOLEAN MODE) AND (categoria like '%$categoria%' AND marca like '%$marca_c%' AND regione like '%$region%' AND provincia like '%$city%' AND tipo_annunc like '%$tipo_ric%') order BY data_insrimento ASC LIMIT $primo$per_page"); 
    ho specificato match e against solo per i campi (titolo,testo) mentre per gli altri dovevano rimanere come prima.

    Cmq ho provato anche in un'altro modo

    Codice PHP:
    $query_limit mysql_query("SELECT * FROM annunci WHERE MATCH(titolo,testo) AGAINST ('*$cosa*' IN BOOLEAN MODE) AND MATCH(categoria) AGAINST ('$categoria' IN BOOLEAN MODE) AND MATCH(marca) AGAINST ('$marca_c' IN BOOLEAN MODE) AND MATCH(regione) AGAINST ('$region' IN BOOLEAN MODE) AND MATCH(provincia) AGAINST ('$city' IN BOOLEAN MODE) AND MATCH(tipo_annunc) AGAINST ('$tipo_ric' IN BOOLEAN MODE) order BY data_insrimento ASC LIMIT $primo$per_page"); 
    ho segnalato match e against per tutte le colonne,ma se seleziono in categoria esempio auto non mi restituisce niente, nonostante ho dei record con il campo categoria=auto


  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    55
    ma dove sbaglio?


  7. #7
    Aiuto!

    1) Hai creato l'indice FULLTEXT su due colonne? Mi raccomando che le colonne siano esattamente quelle due e che siano specificate nello stesso ordine.
    2) Non mischiare troppa roba insieme. Non fare più di un MATCH AGAINST nella stessa query ed eviterei anche i LIKE.
    3) Quanti record hai nella tabella? Se hai solo una manciata di record è possibilissimo che molte parole, anche se sono presenti, non verranno trovate. La tabella dev'essere un minimo popolata.

    Comunque se c'è un errore SQL te lo dovrebbe dire. Usa Query Browser o Phpmyadmin per esserne sicuro.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    55
    non mi da nessun errore.
    sicuramente sono io che mi sono spiegato male, vediamo se riesco a spiegarmi meglio.

    Allora
    ho dei campi di ricerca $cosa - $categoria - $marca_c - $region - $city

    $cosa si rifereisce a una descrizione che inserisco
    $categoria si riferisce alle auto - abitazioni - abbigliamento ....
    $marca_c appare solo se selezionato auto in $categoria
    $region si riferisce alle regioni d'italia
    $city alle città

    se seleziono nel campo $categoria=auto mi dovrebbe restituire tutti i record con categoria auto, adesso voglio affinare la ricerca e seleziono $region=lazio, mi dovrebbe restituire tutte le auto del lazio, poi seleziono $city=roma a questo punto dovrei avere tutte le auto di roma, se alla fine scrivo nel campo $cosa=lusso estremo a questo punto dovrei avere solo le auto a roma con una descrizione che contiene lusso estremo o una sola delle due parole.
    in realtà se compilo il campo $cosa funziona bene,ma appena seleziono un'altra delle variabili non ho + niente

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.