MySQL tri alphabétique foireux
Résolu
le_boss
Messages postés
168
Date d'inscription
Statut
Membre
Dernière intervention
-
le_boss Messages postés 168 Date d'inscription Statut Membre Dernière intervention -
le_boss Messages postés 168 Date d'inscription Statut Membre Dernière intervention -
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 ?
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 ?
A voir également:
- MySQL tri alphabétique foireux
- Comment trier par ordre alphabétique sur excel - Guide
- Logiciel tri photo - Guide
- Mysql community server - Télécharger - Bases de données
- Triez ce tableau par ordre alphabétique des prénoms. ✓ - Forum Excel
- Mysql error in file: /engine/classes/mysql.php at line 53 ✓ - Forum Réseaux sociaux
9 réponses
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.
Pareil pour les "«", je les ai remplacés par des "\"" et ça marche très bien maintenant.
Merci pour ton aide fiu.
ça doit être parce que la "a " (a espace) se situe avant le aa.
Par contre je ne vois pas comment faire
Par contre je ne vois pas comment faire
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, ' ', '')
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, ' ', '')
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)', '')
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)', '')
tssss
C'est pas deux expressions qu'il faut donner
1: REPLACE(tata, ' ', '')
2: REPLACE(tata, '«', '')
mais une seule: REPLACE(REPLACE(tata, '«', ''), ' ', '')
C'est pas deux expressions qu'il faut donner
1: REPLACE(tata, ' ', '')
2: REPLACE(tata, '«', '')
mais une seule: REPLACE(REPLACE(tata, '«', ''), ' ', '')
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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à.
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
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
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.
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.