Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1277 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  probleme SELECT en MATCH avec du HTML...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme SELECT en MATCH avec du HTML...

n°1600980
the_bigboo
Posté le 20-08-2007 à 10:48:04  profilanswer
 

Hello a tous ceux qui liront ce message :)
 
J'ai un petit souci dans l'une de mes requetes. Voici la requete en question :

Code :
  1. SELECT * FROM `une_articles` WHERE 1 AND MATCH (texte) AGAINST ('fiscalité') ORDER BY MATCH (texte) AGAINST ('fiscalité') DESC


Cette requete s'execute oui mais incorectement. Je m'explique :
 
Les données contenues dans le champ sur lequel je fais mes requetes sont en HTML saisies par un editeur de contenu. Les é deviennent é etc...
 
Le probleme c'est que cette requete me sort des données incohérente car elle matche uniquement l'expression é dans les autres enregistrements !
Autrement dit cette requete me ressort les enregistrements contenant des mots accentués. Ce qui n'est pas du tout pertinent.
 
Donc si certains d'entre vous ont déjà été exposés à ce genre de problème...

mood
Publicité
Posté le 20-08-2007 à 10:48:04  profilanswer
 

n°1601019
nycius
Ich liebe dich !
Posté le 20-08-2007 à 11:32:50  profilanswer
 

Fais une fonction qui inverse les codes HTML de tes accents

n°1601082
the_bigboo
Posté le 20-08-2007 à 14:17:34  profilanswer
 

Ca ne règlerais pas le probleme. Le texte dans la base est enrichi. Il ne peut etre stocké qu'en HTML
 
La solution serait pourquoi pas une procédure stockée pour faire une sorte de htmlentity_decode... Et encore je suis en MySQL 4 donc c'est a oublier... :/

n°1601095
omega2
Posté le 20-08-2007 à 14:39:03  profilanswer
 

Citation :

La fonction MATCH() effectue la recherche d'une chaîne de caractères dans une liste de textes (et dans un groupe d'une ou plusieurs colonnes utilisées pour l'index FULLTEXT). La chaîne recherchée est donnée en argument à AGAINST(). La recherche est sans distinguer les majuscules des minuscules. Pour chaque ligne de la table, MATCH() retourne une valeur de pertinence, qui est une mesure de la ressemblance entre le chaîne recherchée et le texte de la ligne dans le colonne donnée dans la liste de MATCH().
 
Quand MATCH() est utilisé comme condition de WHERE (voir l'exemple suivant) les lignes retournées sont automatiquement organisées avec la pertinence la plus élevé en premier. La pertinence est un nombre décimal positif. La pertinence de zéro signifie qu'il n'y a pas de similarité. La pertinence est calculé en fonction du nombre de mots dans la ligne, du nombre de mots uniques dans cette ligne, du nombre total de mots dans la liste, et du nombre de documents (lignes) qui contiennent un mot en particulier.


En clair, même s'il ne trouve que la moitié de ce que tu lui demandes, la valeur de "MATCH (texte) AGAINST ('fiscalité')" sera supérieure à 0 et le système te les retournera. En plus de ça, c'est une recherche qui travaille mot à mot, ça ne m'étonnerait pas que mysql considère que 'fiscalité' est formé du mot 'fiscalit' et du mot 'eacute' vu que le caractère '&' n'est pas une lettre ni un chiffre.
 
Comme le dit nycius, utilise donc une fonction (html_entity_decode par exemple) pour transformer tous les codes html en caractères normaux. Evidement, si t'as des balises html dans tes messages il faudra d'abord les transformer en quelque chose de plus neutre (du bbcode par exemple) Ca résoudra surement ton problème comme par magie.
 
PS : Comme indiqué dans le bout du manuel de mysql que j'ai cité, mysql tri par pertinence décroissante s'il n'y a aucun tri explicite d'indiqué dans la requette. Tu peux donc enlever le "order by" qui lui fait faire deux fois exactement le même boulot.

n°1602097
the_bigboo
Posté le 22-08-2007 à 10:00:09  profilanswer
 

L'utilisation du BBCODE est a exclure car je ne peux pas changer l'editeur de contenu... Enfin si mais ca ferait énormément de taf en plus, et on perdrait nettement en lisibilité :/
 
Mon texte en base est obligatoirement en HTML :spamafote:
 
Donc je sais pas comment régler ce problème :/

n°1602100
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-08-2007 à 10:06:28  profilanswer
 

fait ton match en boolean mode avec un + devant fiscalité

n°1602246
the_bigboo
Posté le 22-08-2007 à 11:48:47  profilanswer
 

Tu peux me donner l'exemple de requete adapté a celui que j'ai donné ?


Message édité par the_bigboo le 22-08-2007 à 11:51:03
n°1602378
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-08-2007 à 15:10:16  profilanswer
 
n°1602422
the_bigboo
Posté le 22-08-2007 à 15:44:37  profilanswer
 

C'est ce que je viens de faire ;)
Merci de ton aide ;)

n°1602500
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-08-2007 à 17:20:09  profilanswer
 

Et ça a marché comme tu voulais?

mood
Publicité
Posté le 22-08-2007 à 17:20:09  profilanswer
 

n°1602573
the_bigboo
Posté le 22-08-2007 à 19:42:42  profilanswer
 

A la perfection ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  probleme SELECT en MATCH avec du HTML...

 

Sujets relatifs
SELECT au dessus de mes capacités (pour le moment)probleme d'image sur un titre (html+css)
Problème d'erreur: Can't connect to local MySQLScript de rotation d'élements html
Ouvrir un fichier HTML en fin de pageprobleme pattern pour eregi_replace()
[JS]Problème d'execution de fction sur onchange() avec IE7Probleme marge IE et objet COM
Problème d'include entre sous-domaines 
Plus de sujets relatifs à : probleme SELECT en MATCH avec du HTML...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR