#1 Le 03/05/2019, à 17:47
- arverne73
[Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Bonjour,
Nous avons une base de données mysql relationnelle avec quelques tables, notamment une table "Communes" ne comprenant que 3 champs : CodCom, Nom de la commune, Code du département.
Nous l'utilisons (en local) avec LibreOffice Base en frontal mais ceci ne change rien à la question.
Quand on fait une requête SQL pour obtenir la liste de ces communes
SELECT NomCom FROM 'Communes' ORDER BY NomCom
nous obtenons toujours une première partie classée de A (Abondance, Aiguilles...) à Z (...Yronde et Buron, Zonza) et ensuite une 2e partie qui repart à A (inconnue Cantal, inconnue Cantal, inconnue Landes, Abries, Aiguebelle,...) jusqu'à Z (...Winkel, Xonrupt-Longemer, Xontupt-Longemer, inconnue Ain, inconnue Aveyron) ! Ceci apparaît de la même façon avec la requête dans LibreOffice ou dans phpmyadmin.
A savoir, la table et son contenu sont issus d'Access® importés il y a plusieurs années.
Le jeu de caractères est latin1 avec un interclassement latin1_bin.
Le problème peut-il être dû à ces derniers paramètres (assez compliqués à maîtriser) ? Pour les minuscules ou les capitales, je peux comprendre... mais le reste ?
Merci pour vos avis.
Dernière modification par arverne73 (Le 06/05/2019, à 15:21)
J-Paul - Utilisateur Ubuntu depuis 2006
Oracular 24.10 - AMD FX et carte graphique AMD Radeon HD 6850
Hors ligne
#2 Le 03/05/2019, à 20:42
- Black-K-fee
Re : [Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Salut...
Est-ce que la table est en
InnoDB
Et sinon, tu peux changer l'interclassement de la table en :
utf8_general_ci
et les colonnes des tables en
utf8mb4_unicode_ci
Ca changera pt-être déjà qqes choses...
Hors ligne
#3 Le 04/05/2019, à 08:02
- bruno
Re : [Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Bonjour,
Le moteur ou l'interclassement (jeux de caractères) n'ont a priori rien à voir la dedans.
Il s'agit d'un problème classique de tri naturel par rapport à un tri alphabétique strict. Mysql ne propose pas de fonction pour faire du tri naturel. Il faut donc faire ce tri après coup avec un autre outil ou modifier la tables pour que les noms de communes soient cohérents avec un tri alphabétique : première lettre toujours en majuscule, pas de champs vides, pas d'espace ou autre devant le nom.
#4 Le 04/05/2019, à 09:05
- arverne73
Re : [Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Merci pour vos réponse.
@ Black : la table est bien en InnoDB. Si l'on veut changer le jeu de caractères, phpmyadmin indique qu'il y a des erreurs, en fait à chaque nom où il y a une lettre accentuée ou une cédille... Donc ça paraît impossible à faire comme ça. Il faudrait une procédure de conversion. Et ceci ne m'explique pas qu'en début de liste j'ai des A puis des B jusqu'à Z puis ça reprend avec les mêmes A, B sans accent ou quoi que ce soit...
@bruno : Comme je le disais au dessus, sauf quelques exceptions, les noms de communes commencent bien par des majuscules autant dans la première partie de liste, que dans la 2e qui se classent toutes les 2 de A à Z (dans le résultat de la requête SQL).
Et pour le tri après coup : n'est ce pas le rôle de la requête SQL avec le mot clé ORDER BY de donner ce résultat ? Et si on fait la requête dans LibreOffice Base, c'est exactement pareil !
Je ne comprends toujours pas comment avoir un résultat classé.
J-Paul - Utilisateur Ubuntu depuis 2006
Oracular 24.10 - AMD FX et carte graphique AMD Radeon HD 6850
Hors ligne
#5 Le 05/05/2019, à 12:26
- bruno
Re : [Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Comme je l'ai dit ORDER BY fait un tri alphabétique strict. Par exemple si tu as :
" Arras"
" Amiens"
"Agen"
"Abbeville"
Tu obtiendras :
Amiens
Arras
Abbeville
Agen
Ceci est du au fait que les deux premiers commencent par une espace, et que l'espace vient en premier dans l'ordre alphabétique (cf. http://support.ecisolutions.com/doc-ddm … chart.htm). Le fait que tu obtienne en apparence deux listes laisse supposer qu'un bon nombre de tes lignes commence par une espace.
#6 Le 06/05/2019, à 10:27
- arverne73
Re : [Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Bonjour,
Merci pour la réponse... mais ça, j'y ai pensé et j'ai regardé ! Je ne vois aucune différence dans la saisie des nom : pas d'espace... ou autre truc qui ferait que ça se classe mal (ou il y a quelque chose que je ne peux pas voir et donc difficilement corriger).
J-Paul - Utilisateur Ubuntu depuis 2006
Oracular 24.10 - AMD FX et carte graphique AMD Radeon HD 6850
Hors ligne
#7 Le 06/05/2019, à 10:40
- bruno
Re : [Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Je ne peux que faire des suppositions. L'idéal serait que tu nous montre une copie de ta table au format sql.
#8 Le 06/05/2019, à 13:49
- arverne73
Re : [Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Et finalement, tu as raison !
Quand on demande la liste, on ne voit rien de particulier, mais quand je fait "modifier" un enregistrement, je m'aperçois que devant le nom de chaque enregistrement de la première partie il y a un "pseudo caractère" sous forme de ? : je ne sais pas d'où ça sort, à quoi cela peut correspondre... et il va falloir trouver une procédure pour arriver à supprimer ce "truc". Lien vers le fichier sql
Merci pour ta pertinence ! Il n'y a pas de secret... c'est forcément un problème de ce type.
J-Paul - Utilisateur Ubuntu depuis 2006
Oracular 24.10 - AMD FX et carte graphique AMD Radeon HD 6850
Hors ligne
#9 Le 06/05/2019, à 14:34
- bruno
Re : [Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Au vu de ton fichier SQL, c'est simple. il s'agit de supprimer toutes les occurrence de « \0 »:
sed -i 's/\\0//g' Communes.sql
Et réinjecter le fichier ainsi corrigé dans la base de données.
#10 Le 06/05/2019, à 15:20
- arverne73
Re : [Résolu]Mysql : impossible d'obtenir un classement des enregistrements
Une 2e fois, je ne pensais pas à ouvrir le fichier sql avec un simple éditeur de texte ! Effectivement, on voit bien les anomalies.
Je ne connais pas cette commande sed (je viens de regarder), mais elle corrige bien le fichier.
Merci encore.
J-Paul - Utilisateur Ubuntu depuis 2006
Oracular 24.10 - AMD FX et carte graphique AMD Radeon HD 6850
Hors ligne