2012-02-15 5 views
2

Comment puis-je résoudre ce petit problèmeSQL Trier par échoue

voici une capture d'écran:

enter image description here

et c'est la requête:

SELECT * 
FROM serverinfo 
ORDER BY rank_pts DESC 

Comme vous pouvez le voir l'ordre est incorect.

Répondre

0

Remplacez rank_pts par FLOAT *edit. Il semble que ce soit le mauvais type à trier

+0

mais il se briserait « » – Dave

+3

Meh, +1 pour réaliser le type est probablement varchar, mais -1 pour suggérer int quand il a clairement des valeurs décimales dont il a besoin pour stocker. Donc +0 de moi. – Interrobang

+0

Oui, vous avez raison @Interrobang. Désolé pour ça ! – seanbreeden

4

Votre colonne ranl_pts est de type varchar, donc ce n'est pas un tri.

Utiliser l'astuce ci-dessous.

SELECT * 
    FROM serverinfo 
    ORDER BY rank_pts+0 DESC 

OU

SELECT * 
    FROM serverinfo 
    ORDER BY CAST(rank_pts AS DOUBLE) desc 
+0

merci mec :-) – Dave

8

Vous pouvez essayer ceci:

ORDER BY CAST(rank_pts as float) DESC 
3

Vous devriez probablement changer ce type de colonne à un flotteur. Comme les autres l'ont souligné, on dirait que c'est une colonne varchar ou texte. Si ce n'est pas le cas et que PHPMyAdmin ne fait que l'afficher dans un format localisé (décimales représentées par, au lieu de - pour nous les anglais), veuillez ne pas tenir compte du reste de ma réponse. Pendant que la conversion du résultat dans votre requête fonctionnerait comme le suggérait Alberto, c'est inefficace à faire à chaque requête. Si vous souhaitez manipuler et trier les données numériquement, vous devez les stocker numériquement. Finalement, vous voudrez peut-être afficher les numéros sous une localisation différente, et vous aurez un autre mal de tête.

Je voudrais stocker les données sous forme de flottant dans la base de données et gérer toute logique sur la façon de l'afficher dans un format localisé du côté de l'application.

+2

+1. Laissez le formatage à l'extrémité avant. Le stockage des valeurs formatées rend les applications très fragiles. – Leigh

3

Je recommande de remplacer le type de données de colonne par numérique et non par caractère. Cela affectera sûrement d'autres parties du code, mais je pense qu'il vaut la peine d'éviter d'autres effets secondaires d'avoir une valeur numérique stockée en tant que représentation de caractères.

Évidemment, la solution rapide est de couler la colonne dans le order by, comme d'autres codeurs l'ont déjà fait remarquer.

+2

Je suis vraiment déçu que la plupart des questions votées ici concernent la solution rapide, et non une solution réelle. –

0
SELECT * 
FROM serverinfo 
ORDER BY CAST(Rank_Pts AS DOUBLE) desc