PHP Mysql : la chaine la 'plus proche' d'une sous chaine. [Résolu]

Signaler
Messages postés
68
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
10 octobre 2006
-
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
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

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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

Messages postés
68
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
10 octobre 2006

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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
pas de quoi



a +