[MySQL] order by "quoi ?" quand on veut ref1, ref2, ref10, ref11 ...

order by "quoi ?" quand on veut ref1, ref2, ref10, ref11 ... [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 22-10-2004 à 09:40:00    

salut,
 
j'ai un champ "ref" de type VARCHAR composé de :
 
référence 1
référence 2
...
référence 9
référence 10
référence 11
...
 
quand je lui demande de faire un ORDER BY ref :
 
1
10
11
2
...
 
quand je lui demande de faire un ORDER BY ref ASC :
 
1
10
11
2
...
 
quand je lui demande de faire un ORDER BY ref DESC :
 
9
...
2
...
11
10
1
 
 
une solution pour avoir :
 
1
2
...
9
10
11
...
 
 
Merci  :jap:


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 22-10-2004 à 09:40:00   

Reply

Marsh Posté le 22-10-2004 à 09:49:37    

Normal, ce sont des chaines de caractères.
Si tu veux cet ordre, remplis de zéros à gauche...
 
[edit]
 
Voir fonction LPAD.


Message édité par skeye le 22-10-2004 à 09:50:20

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 22-10-2004 à 09:57:49    

skeye a écrit :

Normal, ce sont des chaines de caractères.
Si tu veux cet ordre, remplis de zéros à gauche...
 
[edit]
 
Voir fonction LPAD.


si je mets des 0, ça va faire moche surtout que la base va être alimentée avec plus de 10000 références.
 
je vais voir du coté de LPAD.
 
merci  :jap:


Message édité par Pizz le 22-10-2004 à 09:58:44

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 22-10-2004 à 10:02:06    

Convertis ton champs VARCHAR vers un type numérique dans ton query. De cette façon, l'ordre souhaité sera respecté.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 22-10-2004 à 10:12:22    

sircam a écrit :

Convertis ton champs VARCHAR vers un type numérique dans ton query. De cette façon, l'ordre souhaité sera respecté.


 
je fais ça comment ? (je vais chercher sur le net pour savoir comment faire, mais si tu as la réponse, ça ira un peu plus vite).
 
un peu plus d'infos :
 
je travaille en PHP
les références sont des séries de livres :
livreA 1 -> livreA 10000
livreB 1 -> livreB 100
livreB 1 -> livreC 25
...
 


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 22-10-2004 à 10:14:40    

Pizz a écrit :

je fais ça comment ? (je vais chercher sur le net pour savoir comment faire, mais si tu as la réponse, ça ira un peu plus vite).
 
un peu plus d'infos :
 
je travaille en PHP
les références sont des séries de livres :
livreA 1 -> livreA 10000
livreB 1 -> livreB 100
livreB 1 -> livreC 25
...


A ma connaissance mysql n'a pas de fonction spécifique comme le to_number d'oracle... :??:
Sinon j'ai rien compris à ton histoire de références...[:dawa]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 22-10-2004 à 11:39:31    

skeye a écrit :

A ma connaissance mysql n'a pas de fonction spécifique comme le to_number d'oracle... :??:
Sinon j'ai rien compris à ton histoire de références...[:dawa]


 
c'est pas grave pour l'explication, j'ai créé une table avec les noms de références, et je fais une relation avec le numéro.
 
ça sera plus simple  :o


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 22-10-2004 à 12:14:59    

essaye un truc barbare du genre
order by SUBSTRING_INDEX(ref,' ',-1) + 1

Reply

Marsh Posté le 22-10-2004 à 12:17:45    

pour finir ça ne va pas non plus la méthode que j'ai trouvé vu qu'il y a des livres avec la référence "2003-2004 /1", "2003-2004 /113", ...
 
j'essaye ton truc Sebastien ;)


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 22-10-2004 à 12:20:19    

tu as des reference completement heterogène, comme veux tu pouvoir faire un tri ?
qui est avant
livreA 1
ou livreA 2003-2004/1

Reply

Marsh Posté le 22-10-2004 à 12:20:19   

Reply

Marsh Posté le 22-10-2004 à 12:20:35    

ça fonctionne !
 
mais il faut le même début avant les chiffres.
mais ce n'est pas un problème pour mon cas.
 
Merci beaucoup Sebastien  :jap:


Message édité par Pizz le 22-10-2004 à 12:21:37

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 22-10-2004 à 12:25:05    

Sebastien a écrit :

tu as des reference completement heterogène, comme veux tu pouvoir faire un tri ?
qui est avant
livreA 1
ou livreA 2003-2004/1


 
ça j'en peux rien si les auteurs des livres font du n'importe quoi ...
 
le principal c'est que c'est bien trié et que les 2003-2004 /1, 2003-2004 /2, ... soient séparés des 1, 2, 3 ...
 
merci :jap:


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 22-10-2004 à 13:39:07    

select ref
from ...
order by lpad(ref, 2, '0')
 
ça doit marcher, comme l'a dit skeye, et en sortie du n'aura pas de 0 puisqu'il n'y a pas de lpad dans le select.
 
de la même façon, tu peux aussi faire :
 
select ref
from ...
order by to_number(ref)
 
Sauf que là ça va planter si un jour ref contient autrechose qu'un nombre (et si c'est un varchar, il y a surement une raison)

Reply

Marsh Posté le 22-10-2004 à 14:18:52    

ben c deja le cas, il contient le mot reference donc aucun des deux systemes que tu utilises fonctionne.
 
De plus to_number existe pas en MySQL, cest la fonction cast() qui est très recente.
Mais MySQL est on va dire intelligent si tu lui fais une addition entre un char et un nombre, il va transformer ca en nombre si possible, c'est le +1 de ma solution.

Reply

Marsh Posté le 22-10-2004 à 15:52:44    

oui, la solution de Sebastien marche à merveille (pour mon cas en tout cas)  :)


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed