Page 1 sur 1

Classement d'une table par numéro comme plan comptable

Posté : 31 juil. 2007, 10:45
par Dryzd
Bonjour ;)

J'essaie désespérement de classer le résultat d'une requête mais je n'y arrive pas. Je m'explique. La table contient qqch comme ca (enregistré dans le désordre) :
221 - A
1 - J
21 - F
12 - C
11 - B
2 - K
22 - L
3 - I
...
Je voudrais qu'une requête me retourne ça (classement comme le plan comptable) :
1 - J
11 - B
12 - C
2 - K
21 - F
22 - L
221 - A
3 - I
...

Mais, et c'est là où j'ai besoin de votre aide, lorsque je boucle sur le résultat pour l'afficher, j'ai ça(classement informatique des valeurs, logique):
1 - J
2 - K
3 - I
11 - B
12 - C
21 - F
22 - L
221 - A
...

Est-ce que vous avez une idée du comment du pourquoi de la chose ?

Merci d'avance de votre aide ;=)

Dryzd

Posté : 31 juil. 2007, 11:10
par d0m
forcement ton premier champ est un entier, si tu lui demandes de les ordonner il ne va pas placer 11 avant 2.

J'ai utilisé le même genre de numérotation et j'ai crée un champ non pas d'entier mais de chaine de caractère (varchar) avec les numéro séparés par des points.
Et j'y ai mis la numérotation sous cette forme :
'1'
'1.1'
'1.2'
'2'
'2.1'
....

Et là en faisant en ordonnant le résultat de la requête sur ce champ ca marche comme tu le veux.

Réponse

Posté : 31 juil. 2007, 11:19
par Dryzd
Merci de cette proposition.
J'ai profité du temps que j'avais pour chercher. Et j'ai trouvé une réponse plus adaptée, je trouve.
Il suffit, dans la requête de rajouter :
ORDER BY CAST(nom_du_champ AS CHAR)

Et ca fonctionne !
Peut-être que ca pourra servir à d'autres ;)

Merci encore et sûrement à bientôt

Dryzd

Posté : 31 juil. 2007, 11:27
par Truc
Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

Posté : 31 juil. 2007, 13:14
par Sékiltoyai
Dryzd, permet moi de te conseiller d'utiliser la solution proposée par d0m car, si je ne me trompe, avec un CAST, un index sur le champ en question est inutilisable, et donc si tu as des tables conséquentes, une requète de tri qui prendrait quelques millièmes de seconde avec un index, prendra des dixièmes de secondes voire des secondes sans index.
L'idéal serait donc d'utiliser une colonne varchar indexée, pour optimiser les tris et sélections.

Posté : 31 juil. 2007, 13:26
par d0m
et il y a en plus ce problème :
111
peut être interprété comme :
1.11
1.1.1
11.1
111

Posté : 31 juil. 2007, 13:32
par Sékiltoyai
Là j'ai des doutes, avec un CAST, normalement 111, il est transformé en la chaine '111'

Posté : 31 juil. 2007, 13:36
par d0m
Là j'ai des doutes, avec un CAST, normalement 111, il est transformé en la chaine '111'
Je parlais niveau conceptuel, c'est bien beau avec peu de parties et sous parties mais imaginons qu'il y ai plus de 9 sous parties, avec la méthode des entiers il n'y aucun moyen de différencier
1.11 de 11.1 de 1.1.1 de 111

Posté : 31 juil. 2007, 14:34
par Sékiltoyai
Ah, bah après, cest à lui de correctement conceptualiser son machin.