Administrateur PHPfrance |
3088 Messages
01 nov. 2007, 02:01
Ne t'en fais pas, mon message ne t'étais pas spécialement adressé, je ne faisais que confirmer tes doutes et commenter sur la situation actuelle.
Concernant ton schéma, il a au moins l'intéret de souligner deux aspects importants de ta table : premièrement, il n'y a pas d'index FULLTEXT. Même s'il ne dispose malheureusement
pas encore de "correction" des mots mal ortographiés, un index FULLTEXT serait bien plus performant qu'un LIKE. (fais une recherche sur "LIKE FULLTEXT" sur les forums, il doit y avoir pas mal de sujets) Deuxièmement, c'est un champs TEXT et non VARCHAR, ce qui est étrange compte tenu du nom de la colonne. S'il s'agit du nom des produits, il ne devraient pas dépasser les 255 caractères et donc un VARCHAR serait bien plus indiqué.
Pour en revenir à ta question originale, je ne vois pas comment filtrer les résultats à l'aide de fonctions contenues dans une requête. Si tu peux transposer ton algorithme en SQL tu pourrais en faire une procédure, mais c'est beaucoup de boulot pour pas grand chose en fin de compte. Ce que je te recommande, c'est de créer une colonne supplémentaire et y stocker une version "simplifiée" du nom de tes produits. Par exemple, en découpant tous les mots et en les stockant sous forme de
lexèmes (cherche sous Google "php french stemmer"). Ou, plus simplement sous forme de metaphone(). Ainsi, "porte-manteau" serait stocké sous la forme "PRT MNT". L'inconvénient de metaphone() est qu'il suit les règles de prononciation de l'anglais et donc certaines modifications seraient nécessaire (retirer les "s" en fin de mots par exemple).
Pour résumer, je pense que ta meilleure option est d'ajouter une colonne où stocker les variations du nom du produit en question. Tu peux remplir cette colonne automatiquement (stemmer, metaphone) voire même à la main lors de la saisie des produits.