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

    [MySql] Motore di ricerca (query)

    Ciao a tutti.
    Sto realizzando un motore di ricerca per un sito.
    Nel campo di ricerca l'utente può inserire un numero idefinito di chiavi.
    Poi, con la funzione explode, creo un array con tutte le chiavi di ricerca.

    In seguito creo la query che sarà più o meno così:

    SELECT FROM tab WHERE content LIKE '%$key1%' OR content LIKE '%$key2%' OR content LIKE '%$key3%' .......

    La cosa funziona bene, però vorrei i risultati in ordine di "maggior affinità"; ossia se l'utente inserisce 3 parole, prima vorrei i risultati con le tre parole, poi con due, e poi con una. Come un normale motore di ricerca insomma. Mi chiedevo se c'é un modo semplice tramite la query per realizzare questo risultato.

    Grazie Mille

  2. #2

  3. #3
    Originariamente inviato da mtx_maurizio
    nessuno?
    con le MyIsam potresti provare con MATCH .. AGAINST. Ma vedi il manuale...

    http://dev.mysql.com/doc/refman/5.0/...xt-search.html

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

  4. #4
    Grazie, sei stato risolutivo.
    ho trovato un articolo completo in italiano.

    http://www.codicefacile.it/tutorials...erca_full-text

  5. #5
    Siccome é una necessità abbastanza comune ho scritto una funzione.
    La pubblico, se a qualcuno dovesse servire...

    Codice PHP:
    <?php
    // Funzione di ricerca che restituisce i risultati in ordine di affinità con la chiave immessa
    function Search ($key)
    {
        
        
    //Definizione di valori costanti
        
    $fulltext "campi fulltext da analizzare separati da virgola"// I campi da analizzare devono essere fulltext
        
    $dblocation "posizione del file di connessione al db";
        
    $table "nome tabella da esaminare";
        
        include 
    "$dblocation";
        
    $sql "SELECT *, MATCH($fulltext) AGAINST('$key' IN BOOLEAN MODE) AS tot FROM $table WHERE MATCH($fulltext) AGAINST('$key' IN BOOLEAN MODE) ORDER BY tot DESC";
        return 
    mysql_query($sql$conn);
    }

    // Questa funzione calcola la percentuale di affinità

    function CalcScore ($result$key)
    {
        
    $key_array explode(" "$key);
        
    $tot count($key_array);
        
    $score intval($result $tot 100);
        echo 
    "$score%";
        
    }

    // ESEMPIO di utilizzo

    //$key = "chiavi di ricerca ";
    //$res = Search($key);
    //
    //while ($row = mysql_fetch_array($res))
    //    {
    //        echo CalcScore($row['tot'], $key) . "
    ";
    //        echo 
    $row['data'] . "
    ";
    //        echo 
    $row['var']) . "
    ";
    //        
    //    }
    ?>

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.