View Full Version : [php]Problema con ricerca record in mysql
leonapster
21-02-2008, 14:46
Ciao,
sto facendo un piccolo motore di ricerca di trame di film. Il mio problema è nell'esecuzione della quey
SELECT * FROM film WHERE name LIKE '%$film_name%' ;
Nel db, per esempio, ho questo film: "Caos Calmo".
Se qualcuno cerca "Calmocaos" o "Calmo Caos" o "Caos-calmo" ecc... non trova il record.
Come fare per ovviare?
In alternativa conoscete script per realizzare motori di ricerca?
Avevo pensato al Zend Framework. Fatemi sapere cosa ne pensate?
grazie
Ciao,
sto facendo un piccolo motore di ricerca di trame di film. Il mio problema è nell'esecuzione della quey
SELECT * FROM film WHERE name LIKE '%$film_name%' ;
Nel db, per esempio, ho questo film: "Caos Calmo".
Se qualcuno cerca "Calmocaos" o "Calmo Caos" o "Caos-calmo" ecc... non trova il record.
Come fare per ovviare?
In alternativa conoscete script per realizzare motori di ricerca?
Avevo pensato al Zend Framework. Fatemi sapere cosa ne pensate?
grazie
ciao,
secondo me dovresti prima sostituire caratteri i strani (tipo -, _, /, \) con uno spazio e poi fare un explode su $film_name e poi inserire le singole parole in AND.
qualcosa del tipo:
$film_name=str_ireplace("-", " ", $film_name);
$temp=explode(" ", $film_name);
$query="SELECT * FROM film WHERE name LIKE '%".$temp[0]."%' AND name LIKE '%".$temp[1]."%'";
magari metti la scrittura della query all'interno di un for per poter aggiungere tutte le parole.
Questo però non risolve il primo esempio che hai detto tu (Calmocaos). Quì il problema stà nell'individuare le parole che compongono il titolo e trovare una soluzione potrebbe non essere conveniente in termini computazionali :mc:
Puoi provare a cercare nella query ogni singola lettera (quindi explode diventa inutile):
...name LIKE '%".$film_name[0]."%' AND name LIKE '%".$film_name[1]."%' AND...
usa strlen per determinare la lunghezza complessiva della stringa
leonapster
22-02-2008, 18:11
Bè credo che la via più semplice sia con il FULL TEXT, anche perchè poi mi ordina i risultati per attinenza
Comunque ho provato ad eseguire questa query:
SELECT * FROM data WHERE MATCH (name) AGAINST ('Die*');
Nel db ho "Die Hard 4".
Invece non mi ritorna nulla di nulla.
Il Full text e' la strada giusta per il motore di ricerca.
Prova senza l'asterisco
leonapster
23-02-2008, 14:26
Il Full text e' la strada giusta per il motore di ricerca.
Prova senza l'asterisco
Neppure senza l'asterisco funziona....
che db usi?
se usi mySQL ci sono delle limitazioni per usare il full text (versione di mySQL, tipo di tabelle ecc.).
prova a vedere cosa dice quì (http://www.risorse.net/mysql/query_full_text.asp)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.