MySQL tri alphabétique foireux

Résolu/Fermé
le_boss Messages postés 168 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 29 octobre 2011 - 12 janv. 2010 à 17:19
le_boss Messages postés 168 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 29 octobre 2011 - 13 janv. 2010 à 14:36
Bonjour,

J'aimerais bêtement trier un champ texte par ordre alphabétique, donc je fais:

SELECT * FROM tutu ORDER BY tata

ou tata est mon champ contenant du texte. Seulement voilà, le tri me donne des choses comme ça:

a ba
a ca
aaa
ara

au lieu de:

aaa
a ba
a ca
ara

donc sitôt qu'il y a un espace, ça foire.

Y a-t-il une solution à ça ?

9 réponses

le_boss Messages postés 168 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 29 octobre 2011 19
13 janv. 2010 à 14:36
Bon, j'ai utilisé la solution du dernier recours... et ça marche...

Pareil pour les "«", je les ai remplacés par des "\"" et ça marche très bien maintenant.

Merci pour ton aide fiu.
1
ça doit être parce que la "a " (a espace) se situe avant le aa.

Par contre je ne vois pas comment faire
0
le_boss Messages postés 168 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 29 octobre 2011 19
12 janv. 2010 à 17:24
y a pas l'ombre d'un doute :-D

merci de le préciser tout de même...
0
Salut

si tu veux que ce soit trié sans les espaces, il faut demander à trier sans les espaces.

si MySQL le supporte, essaie
SELECT * FROM tutu ORDER BY REPLACE(tata, ' ', '')
si ça marche pas (normalement, on ne trie que sur une colonne présente dans les données en sortie) essaie alors
SELECT *, REPLACE(tata, ' ', '') FROM tutu ORDER BY REPLACE(tata, ' ', '')
0
le_boss Messages postés 168 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 29 octobre 2011 19
12 janv. 2010 à 19:40
T'es un chef ! Apparemment, MySQL supporte ta première suggestion.

Merci !

Si je peux encore profiter un peu de ton savoir... pendant que tu es là:

Comment je peux faire pour qu'en plus, il ignore les "«" placés au début de certains enregistrements ?

J'ai essayé ces deux variantes, sans succès:

SELECT * FROM tutu ORDER BY REPLACE(tata, ' ', ''), REPLACE(tata, '«', '')
SELECT * FROM tutu ORDER BY REPLACE(tata, ' ', ''), REPLACE(tata, 'chr(174)', '')
0
tssss

C'est pas deux expressions qu'il faut donner
1: REPLACE(tata, ' ', '')
2: REPLACE(tata, '«', '')

mais une seule: REPLACE(REPLACE(tata, '«', ''), ' ', '')
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
le_boss Messages postés 168 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 29 octobre 2011 19
12 janv. 2010 à 21:00
Alors désolé, mais avec ce code, seuls les espaces sont enlevés.
0
cool

si les espaces sont enlevés, c'est que REPLACE(tata, '«', '') ne provoque pas d'erreur !
pour te convaincre que ce REPLACE fonctionne bien, remplace donc '«' par 'a'
et comme c'est toi qui as donné «, je te laisse chercher comment l'indiquer dans le REPLACE.
0
le_boss Messages postés 168 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 29 octobre 2011 19
12 janv. 2010 à 21:53
Désolé, c'est moi me suis planté lamentablement avant. En fait, la requête ne contenait pas de champs avec un "«". J'ai essayé en mettant une lettre quelconque et en effet ça fonctionne. Maintenant, si j'essaie avec l'apostrophe (cette fois la requête en contient), ça me les enlève pas quand même. C'est curieux. Je rame, là.
0
en fait, si tu veux savoir si tu exprimes correctement tes chaines de caractères, fais donc un
select tata from tutu where tata like '%«%'
ou si je m'en tiens à ce que tu avais écrit
select tata from tutu where tata like '%||chr(174)||'%'

modifie ensuite cette requête pour essayer de chercher les tata contenant une apostrophe.
lorsque tu auras trouvé la bonne syntaxe pour exprimer une apostrophe, tu pourras alors t'en servir dans n'importe quelle fonction dont le REPLACE
0
le_boss Messages postés 168 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 29 octobre 2011 19
13 janv. 2010 à 13:11
Bon alors voilà ce qui se passe:

Dans ma BDD ce ne sont en fait pas des apostrophes chr(39), mais un autre caractère qui y ressemble, le chr(146) apparemment.

Lorsque je fais:
SELECT * FROM tutu WHERE tata LIKE('%’%') => c'est à dire recherche du chr(146): aucun résultat, alors que ma BDD en est remplie.

J'ai donc essayé de modifier un des enregistrements et de mettre une vraie apostrophe à la place du chr(146) et de faire une recherche sur les apostrophes, et là il me trouve l'enregistrement que je viens de modifier.

Si tu as une idée pourquoi l'un marche et pas l'autre, je suis preneur...

Ma solution de dernier recours sera de faire un export de ma table, de l'ouvrir dans un éditeur de texte et de remplacer tous les chr(146) par des vraies apostrophes précédées d'un backslash pour les échapper.
0