order by "quoi ?" quand on veut ref1, ref2, ref10, ref11 ... [MySQL] - SQL/NoSQL - Programmation
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.
Marsh Posté le 22-10-2004 à 09:57:49
skeye a écrit : Normal, ce sont des chaines de caractères. |
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
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é.
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
...
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). |
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...
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... |
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
Marsh Posté le 22-10-2004 à 12:14:59
essaye un truc barbare du genre
order by SUBSTRING_INDEX(ref,' ',-1) + 1
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
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
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
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 ? |
ç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
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)
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.
Marsh Posté le 22-10-2004 à 15:52:44
oui, la solution de Sebastien marche à merveille (pour mon cas en tout cas)
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
---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !