Comment puis-je résoudre ce petit problèmeSQL Trier par échoue
voici une capture d'écran:
et c'est la requête:
SELECT *
FROM serverinfo
ORDER BY rank_pts DESC
Comme vous pouvez le voir l'ordre est incorect.
Comment puis-je résoudre ce petit problèmeSQL Trier par échoue
voici une capture d'écran:
et c'est la requête:
SELECT *
FROM serverinfo
ORDER BY rank_pts DESC
Comme vous pouvez le voir l'ordre est incorect.
Remplacez rank_pts
par FLOAT *edit
. Il semble que ce soit le mauvais type à trier
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
merci mec :-) – Dave
Vous pouvez essayer ceci:
ORDER BY CAST(rank_pts as float) DESC
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.
+1. Laissez le formatage à l'extrémité avant. Le stockage des valeurs formatées rend les applications très fragiles. – Leigh
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.
Je suis vraiment déçu que la plupart des questions votées ici concernent la solution rapide, et non une solution réelle. –
SELECT *
FROM serverinfo
ORDER BY CAST(Rank_Pts AS DOUBLE) desc
mais il se briserait « » – Dave
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
Oui, vous avez raison @Interrobang. Désolé pour ça ! – seanbreeden