Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/05/2019, à 18: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, à 16:21)


J-Paul - Utilisateur Ubuntu depuis 2006
Mantic 23.10 AMD FX et carte graphique AMD Radeon HD 6850

Hors ligne

#2 Le 03/05/2019, à 21: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, à 09: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.

Hors ligne

#4 Le 04/05/2019, à 10: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
Mantic 23.10 AMD FX et carte graphique AMD Radeon HD 6850

Hors ligne

#5 Le 05/05/2019, à 13: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.

Hors ligne

#6 Le 06/05/2019, à 11: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
Mantic 23.10 AMD FX et carte graphique AMD Radeon HD 6850

Hors ligne

#7 Le 06/05/2019, à 11: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.

Hors ligne

#8 Le 06/05/2019, à 14: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
Mantic 23.10 AMD FX et carte graphique AMD Radeon HD 6850

Hors ligne

#9 Le 06/05/2019, à 15: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.

Hors ligne

#10 Le 06/05/2019, à 16: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
Mantic 23.10 AMD FX et carte graphique AMD Radeon HD 6850

Hors ligne