Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/04/2011, 10h16   #1
Invité de passage
 
Homme
Inscription : avril 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 2
Points : 1
Points : 1
Par défaut regex non fonctionnelle

Bonjour!

Je viens solliciter votre aide car je suis a court d'idée !
J'aimerai faire une recherche dans ma base et donc afficher les lignes comprenant un mot inscrit dans un formulaire...
Pour plus de clarté, je vous donne un exemple:
Dans la base, il y a 'Chargé de projet' sur une ligne.
Lors de ma recherche, je ne veux pas m’arrêter aux accents et donc si je tape 'charge de projet', voila ce qui sera cherché: [cç]h[aàáâãäå]rg[eèéêë] d[eèéêë] pr[oðòóôõö]j[eèéêë]t !
J'en viens a cette expression grâce a plusieurs fonctions...
Ma requête est donc la suivante:
Code :
1
2
3
SELECT DISTINCT * 
FROM matable 
WHERE champ REGEXP "^.*[cç]h[aàáâãäå]rg[eèéêë] d[eèéêë] pr[oðòóôõö]j[eèéêë]t.*$"
Seulement voilà: aucun résultat!

C'est bizarre car si je recherche 'charge', 'de projet' ou encore 'e de projet', j'ai un résultat! Par contre, avec 'ge de projet', je n'en ai plus...

Dans ma base, les accents sont de cette forme: é (ce qui ne pose aucun problème ailleurs, même au niveau de la recherche).

Merci d'avance pour vos lumières!
patator63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 11h55   #2
Invité de passage
 
Homme
Inscription : avril 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 2
Points : 1
Points : 1
Bonjour!

J'ai finalement corrigé l'erreur en comparant les données de la page SANS ACCENT avec le terme recherché sans accent également.
Pour enlever les accents, j'ai créé une fonction 'translate' (comme sur Oracle) qui converti chaque caractère accentué par son équivalent sans accent.

Pour ceux que ça intéresse, voici la fonction (que j'ai trouvé sur la toile):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE FUNCTION translate(V_string VARCHAR(255), V_from VARCHAR(255), V_to VARCHAR(255))
RETURNS VARCHAR(255) DETERMINISTIC
BEGIN
 
DECLARE i INT;
SET i = CHAR_LENGTH(V_from);
 
WHILE i > 0 DO
 SET V_string = REPLACE(V_string, SUBSTR(V_from, i, 1), SUBSTR(V_to, i, 1));
 SET i = i - 1;
END WHILE;
 
RETURN V_string;
 
END;
Il faut l'utiliser de cette façon:
Code :
1
2
3
SELECT champ 
FROM matable 
WHERE translate(champ, "ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝáàâäãåçéèêëíìîïñóòôöõúùûüýÿ", "AAAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy")) LIKE "%mot_recherche%"
Le résultat est celui que j'attendais... Résolu donc!

A bientôt!
patator63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 00h01   #3
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 843
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 843
Points : 1 318
Points : 1 318
Salut, ton problème est du à l'encodage de tes caractères et à la collation choisi, y a d'autre posts ici ou on en parle dernièrement, ça t'évitera les regexp
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h13.


 
 
 
 
Partenaires

Hébergement Web