Guarda questa parte di guida.
http://php.html.it/guide/lezione/228...re-di-ricerca/
Ti spiega molto bene come fare un motore di ricerca creando una query dinamicamente. Questo ti permette di inserire quante chiavi di ricerca vuoi.
Purtroppo usando LIKE e OR ti trova tutti quei campi dove c'è almeno una parola. Però te li ordina in modo casuale (non proprio casuale, te li ordina per come li trova).
La classe che ti invio li ordina per score. Metti che tu hai iserito come chiavi "sedia tavolo lampada". Prima estrae (se ci sono) i campi dove ci sono tutte e tre le parole, poi quelli con due e poi quelli con uno solo.
Se vuoi usarla dovrai però modificarla; siccome può cambiare la tabella, dovrai mettere la tabella nel costruttore e specificarla quando istanzi la classe
Codice PHP:
<?php
/**
* @Author Tarchini Maurizio
* @Version 2.0
* @AuthorEmail [email]info@mtxweb.ch[/email] or [email]maurizio.tarchini@bluewin.ch[/email]
* @AuthorSite [url]http://www.mtxweb.ch[/url]
* @DocumentDate 20-1-2008
* @DocumentLicense PUBLIC -FREE
* @LicenseDetail GNU General Public License
* @LicenseSite [url]http://www.gnu.org/licenses/gpl.txt[/url]
* @PHPCompatibility 4.2 or later
* @DevelopmentStatus stable
*/
########################################################################################
# CLASSE Search: utilizzo
#
# Importante: i campi del database che si desidera analizzare, devono avere chiave
# fulltext obbligatoriamente.
#
# Vanno configurati i parametri di ricerca e di accesso al db all'inizio della classe
#
# Esempio di uso semplice:
#
# $key = "argomenti della ricerca";
# $search = new Search($key);
# $search->GetResource();
#
# A questo punto disponiamo della risorsa necessaria per poter stampare la ricerca
#
# while ($row = mysql_fetch_array($search->res))
# {
# echo $row['ad esempio il titolo articolo'];
# }
#
# Altro esempio ma prendendo anche lo score di ogni risultato (tipo 4/5 -> 4 occorrenze trovate
# su 5 oppure in percentuale. Settare $pf su p per la percentuale o f per la frazione):
#
# $key = "argomenti della ricerca";
# $search = new Search($key);
# $search->GetResource();
#
# while ($row = mysql_fetch_array($search->res))
# {
# echo $row['titolo articolo'] . " " . $search->CalcScore($row['tot']);
# }
#
#
##########################################################################################
/**
* Search
*
* @package lib
* @author Tarchini Maurizio
* @copyright 2008
* @version 2.0
* @access public
*/
class Search
{
#CONFIGURA
#Parametri ricerca
var $fulltext = "campi fulltext da analizzare separati da virgola senza spazi";
var $table = "tabella oggetto della ricerca";
#parametri db
var $host = "localhost";
var $password = "db password";
var $user = "root";
var $db = "nome database";
#metodo score -> p in percentuale, f in frazione
var $pf = "f";
#FINE CONFIGURAZIONE
#NON EDITARE OLTRE QUESTA LINEA
var $key;
var $conn;
var $res;
function Search($key)
{
$this->key = $key;
}
function DbConnectAndSelect()
{
$this->conn = @mysql_connect($this->host, $this->user, $this->password) or die ("Impossibile stabilire una connessione con il server.
MySql risponde: " . mysql_error() . "
Il codice errore é:" . mysql_errno());
@mysql_select_db($this->db, $this->conn) or die ("Impossibile connettersi al database $this->db.
MySql risponde: " . mysql_error() . "
Il codice errore é:" . mysql_errno());
}
function GetResource()
{
$this->DbConnectAndSelect();
$sql = "SELECT *, MATCH($this->fulltext) AGAINST('$this->key' IN BOOLEAN MODE) AS tot FROM $this->table WHERE MATCH($this->fulltext) AGAINST('$this->key' IN BOOLEAN MODE) ORDER BY tot DESC";
$this->res = mysql_query($sql, $this->conn);
}
function CalcScore($tot)
{
switch($this->pf)
{
case "f":
$key_array = explode(" ", $this->key);
$this->total = count($key_array);
return $tot . " / " . $this->total;
break;
case "p":
$key_array = explode(" ", $this->key);
$this->total = count($key_array);
$output = intval($tot / $this->total * 100) . "%";
return $output;
break;
default:
$key_array = explode(" ", $this->key);
$this->total = count($key_array);
return $tot . " / " . $this->total;
}
}
}
?>