PHP Mysql : la chaine la 'plus proche' d'une sous chaine.

Résolu
irkiouak Messages postés 68 Date d'inscription mardi 21 novembre 2000 Statut Membre Dernière intervention 10 octobre 2006 - 11 août 2005 à 19:39
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 12 août 2005 à 12:53
Bonjour chers developpeurs,
J'ai crée une formulaire de recherche d'un sujet (sur la table sujet) avec un champ texte critere.
Ce que je fais maintenant est de prendre chaque mot séparément grâce à la fonction explode(' ',$critere); qui me retourne les mots qui constitue la chaine;
et puis je classe les résultats de la recherche (résultat de la requete sur les sujets qui contiennent au moins l'un de ces mots clefs) selon le nombre des différents mots clefs y cité.
un exemple plus parlant :
supposant que la chaine composée par l'utilisateur est : $critere = "policier attaque malfaiteur"
je decortique cette chaine en $criteres=array{"policier","attaque","malfaiteur"}.
j'execute une requette pour chaque mot séprément, et je recense le nombre des differents mots clefs trouvé dans la base des sujets.
sujet1 : "le policier Xman a attaque un malfaiteur... "
sujet2: "le chef policier doit être l'exemple en discipline .je sais pas koi.. malfaiteur..."
sujet3:"un malfaiteur a attaque un policier de la route .."

le sujet1 reçoie 3pt, le sujet2 1pt, et le sujet3 3pt.

comme vous voyer le recensement simple du nombre de differents mots clefs apparu n'est pas optimal : le sujet3 dois être le dernier classé.

pour mieux faire, je dois faire plusieurs boucles qui cherchent d'abord les mots dans le bon sens :-(

Si vous avez déja créer un algorithme plus optimal, ou vous connaissiez une foncion en Mysql qui sait trouver la chaine la plus 'proche' d'une sous chaine; votre aide sera si précieux pour moi.

Merci d'abord pr avoir lu tous ça!

Sympa developpeur ;-) http://pluscool.site.voila.fr

3 réponses

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
12 août 2005 à 00:19
Salut,



ta solution n'est pas optimale, penche-toi plutôt du côté des index
FULLTEXT. Place un index FULLTEXT sur ton champ sujet et exécute une
requête du type :



"SELECT MATCH(sujet) AGAINST('".$recherche."' IN BOOLEAN MODE) AS
pertinence FROM table WHERE MATCH(sujet) AGAINST('".$recherche."' IN
BOOLEAN MODE) ORDER BY pertinence DESC

1
irkiouak Messages postés 68 Date d'inscription mardi 21 novembre 2000 Statut Membre Dernière intervention 10 octobre 2006
12 août 2005 à 12:42
Merci aoui pr votre aide Anthomicro;
C'est tout à fait ce que je cherche!!
Comme je suis chanceux d'être accueillis par cette grandiose ruche de developpeurs.

Sympa developpeur ;-) http://pluscool.site.voila.fr
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
12 août 2005 à 12:53
pas de quoi



a +

0
Rejoignez-nous