Page 1 sur 1
Recherche sur première lettre avec caractères spéciaux
Posté : 04 févr. 2008, 11:26
par saebakun
Bonjour,
voilà la table:
Code : Tout sélectionner
CREATE TABLE `personnes` (
`id` int(11) NOT NULL auto_increment,
`nom` varchar(200) NOT NULL,
`prenom` varchar(200) NOT NULL,
`pays` varchar(200) NOT NULL,
)
j'ai une requête qui doit me sortir toutes les personnes de la base de données qui commence par la lettre demandé par l'utilisateur. Il clique sur un lien qui correspond à sa lettre et moi je lance ça :
Code : Tout sélectionner
select * from personnes where nom like '".$_GET['lettre_debut']."%' order by nom
Ou ça donc:
Code : Tout sélectionner
select * from personnes where nom like 'A%' order by nom_audit
Le souci c'est que quand les nom commence par Ô ou Ö ou Ä etc.... il me sort pas les noms :/
Comment pourrais-je faire svp?
merci.
Posté : 04 févr. 2008, 12:19
par Maitrepylos
Bonjour,
Est-ce que c'est caractère ont la même formes dans ta Db?
Posté : 04 févr. 2008, 12:22
par saebakun
Dans ma DB les noms apparaissent bien avec des Ö ou des Ä Â etc..
Donc oui oui en base les noms ont bien des signes spéciaux.
Le problème c'est que SQL dis que A est != de Ä et du coup ceux là ne ressortent pas de mon select :/
Posté : 04 févr. 2008, 12:34
par Maitrepylos
Fais un echo de ton select pour voir ce qu'il retourne quand tu lui passes ce genre de caractère
Posté : 04 févr. 2008, 13:02
par d0m
Il faut d'abord faire 2 chaines d'équivalence :
$avec_accents = 'âäàöô.....';
$sans_accents = 'aaaoo.....';
Ensuite tu pourrais essayer d'utiliser la fonction sql translate qui va faire la relation :
$requete = "
select *
from personnes
where translate(nom,'".$avec_accents."','".$sans_accents."') like '%".$_GET['lettre_debut']."'
order by nom"
Posté : 04 févr. 2008, 14:24
par saebakun
ton idée est bonne mais me rend ça :
SELECT * FROM personnes WHERE translate(nom, 'âäàöô', 'aaaoo') LIKE 'A%' ORDER BY nom
Ca me rend :
#1305 - FUNCTION annuaire.translate does not exist :/
Posté : 04 févr. 2008, 14:42
par Maitrepylos
Le translate,replace ne fonctionne pas que sur le select?
$requete = "
select nom,
TRANSLATE(nom,'â','a'),
TRANSLATE(nom,'ä','a'),
TRANSLATE(nom,'à','a'),
TRANSLATE(nom,'ö','o'),
TRANSLATE(nom,'ô','o'),
from personnes
where nom like '%".$_GET['lettre_debut']."'
order by nom"
Posté : 04 févr. 2008, 14:42
par d0m
il semble que l'équivalent de la fonction
translate() en mysql est la fonction
replace()
Posté : 04 févr. 2008, 15:06
par Maitrepylos
a essayer donc
Posté : 04 févr. 2008, 15:11
par saebakun
En fait la bonne syntaxe est celle ci au final:
Code : Tout sélectionner
$requete = "
select nom,
from personnes
where
replace(nom,'Ö','O') like '".$_GET['lettre_debut']."%' OR
replace(nom,'Ô','O') like '".$_GET['lettre_debut']."%' OR
replace(nom_audit,'Ä','A') like '".$_GET['lettre_debut']."%' OR
replace(nom_audit,'Â','A') like '".$_GET['lettre_debut']."%'
order by nom"
J'ai mis des majuscules car dans ma base les enregistrements sont fait comme ça
Donc niquel comme ça
Merci encore

Posté : 04 févr. 2008, 16:13
par Maitrepylos
Par acquis de conscience ceci ne fonctionne pas ?
Code : Tout sélectionner
$requete = "
select nom,
replace(nom,'Ö','O'),
replace(nom,'Ô','O'),
replace(nom_audit,'Ä','A'),
replace(nom_audit,'Â','A'),
from personnes
where nom like '".$_GET['lettre_debut']."%''
order by nom"
Posté : 04 févr. 2008, 16:16
par d0m
Par acquis de conscience ceci ne fonctionne pas ?
Code : Tout sélectionner
$requete = "
select nom,
replace(nom,'Ö','O'),
replace(nom,'Ô','O'),
replace(nom_audit,'Ä','A'),
replace(nom_audit,'Â','A'),
from personnes
where nom like '".$_GET['lettre_debut']."%''
order by nom"
je ne pense pas puisque le remplacement se fait après que la ligne trouvée vérifie la condition.
Posté : 04 févr. 2008, 16:25
par Maitrepylos
Ha bon, enfin je me le met dans un coin, on ne sait jamais.
Posté : 04 févr. 2008, 16:25
par saebakun
Non non ça ne passait pas, pardon de ne pas l'avoir précisé oui
Non il faut le faire sur le where et bien séparer chaque possibilité avec un OR