Recherche sur première lettre avec caractères spéciaux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recherche sur première lettre avec caractères spéciaux

par saebakun » 04 févr. 2008, 16:25

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

par Maitrepylos » 04 févr. 2008, 16:25

Ha bon, enfin je me le met dans un coin, on ne sait jamais.

par d0m » 04 févr. 2008, 16:16

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.

par Maitrepylos » 04 févr. 2008, 16:13

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"

par saebakun » 04 févr. 2008, 15:11

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 :D

Merci encore :)

par Maitrepylos » 04 févr. 2008, 15:06

a essayer donc

par d0m » 04 févr. 2008, 14:42

il semble que l'équivalent de la fonction translate() en mysql est la fonction replace()

par Maitrepylos » 04 févr. 2008, 14:42

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"

par saebakun » 04 févr. 2008, 14:24

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 :/

par d0m » 04 févr. 2008, 13:02

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"

par Maitrepylos » 04 févr. 2008, 12:34

Fais un echo de ton select pour voir ce qu'il retourne quand tu lui passes ce genre de caractère

par saebakun » 04 févr. 2008, 12:22

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 :/

par Maitrepylos » 04 févr. 2008, 12:19

Bonjour,
Est-ce que c'est caractère ont la même formes dans ta Db?

Recherche sur première lettre avec caractères spéciaux

par saebakun » 04 févr. 2008, 11:26

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.