[Résolu] PHP MySQL - Problème de recherche dans la base

PHP MySQL - Problème de recherche dans la base [Résolu] - SQL/NoSQL - Programmation

Marsh Posté le 04-04-2007 à 21:58:25    

Bonjour à tous,
 
Voici mon problème :
Je dispose d'une base MySQL stockant diverses informations ainsi qu'un moteur de recherche codé en PHP. Le problème survient lorsque je recherche un mot accentué dans la base. Mettons que la base stocke le mot évènement. Si je passe en paramètre à mon moteur le mot évènement, aucun souci, par contre si je recherche le mot evenement, ca ne marche pas. J'utilise la clause like dans ma requete sql. J'ai cherché un peu sur le net et apparamment en utilisant like (au lieu de =) ca marche. Je ne sais pas vraiment d'ou cela peut venir. Si cela peut aider, le champ sur lequel je souhaite faire la recherche et de type text et l'interclassement est latin1_general_ci. Ma base est la base MySQL fournit par free. Le problème survient aussi avec les majuscules, si je recherche Toto et que le mot stocké dans la base vaut toto, ca ne marche pas non plus...
 
Par avance merci pour votre aide  :jap:


Message édité par Nitro12 le 05-04-2007 à 20:38:34
Reply

Marsh Posté le 04-04-2007 à 21:58:25   

Reply

Marsh Posté le 04-04-2007 à 22:18:31    

Alors très vaguement, tu peux regarder la doc MySQL au niveau des fonctions REGEXP (pour faire des expressions conditionnelles par exemple), soundex (qui permettent de comparer des chaines de caractères en fonction de leur sonorité) et sinon, les opérateurs booléens qui fonctionnent avec MATCH/AGAINST.

Reply

Marsh Posté le 05-04-2007 à 09:42:28    

utilise les hints concernant le charset utilisé et surtout, la méthode de comparaison des lettres accentuées.

Reply

Marsh Posté le 05-04-2007 à 12:49:51    

Merci pour vos réponses. J'ai tester avec SOUNDEX, ca a pas l'air de marcher du tout, de plus j'ai vu que l'algorithme était basé sur les sonorités anglaises, par exemple "âne" et "ânes" ne "sonneront" pas pareil... J'ai essayer dans ma requete d'utiliser MATCH et AGAINST, sans résultat : select * from table where MATCH(nom_champ) AGAINST('$mot_cherche'). A moins que ce ne soit pas comme ca que ca s'utilise??  
MagicBuzz, qu'appelle tu hints et méthode de comparaison des lettres accentuées?

Reply

Marsh Posté le 05-04-2007 à 13:21:33    

La collation (COLLATE) peut t'aider aussi, tu peux comparer des chaînes en tenant ou non compte de la casse, des accents... sans toucher à la collation de la base ou de la colonne
 
http://www.google.com/search?clien [...] 8&oe=utf-8

Reply

Marsh Posté le 05-04-2007 à 14:12:50    

pikti a écrit :

La collation (COLLATE) peut t'aider aussi, tu peux comparer des chaînes en tenant ou non compte de la casse, des accents... sans toucher à la collation de la base ou de la colonne
 
http://www.google.com/search?clien [...] 8&oe=utf-8


voilà, c'est collate, me souvenait plus du nom exact :jap:

Reply

Marsh Posté le 05-04-2007 à 20:37:42    

Merci pour vos réponses. En étudiant de plus près la collation à l'aide d'un bon tuto que vous trouverez à cette adresse :  
http://antoun.developpez.com/mysql [...] ations.pdf
j'ai pu résoudre mon problème en remplaçant tout simplement mon Interclassement qui était accent sensitive contre un qui ne l'était pas.
 
Merci encore

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed