J'ai une table dans laquelle j'ai trois champs avec le type de données INT, INT et INT.Trier par plusieurs colonnes MySQL
Je veux trier ma requête de sélection en utilisant toutes ces trois colonnes. Trier par ASC si le champ A < = 10, trier par DESC field2 et trier par champ ASC 3.
SELECT * FROM table1 WHERE id=uid
ORDER BY
CASE table1.field1
WHEN table1.field1 < 11 THEN table1.field1
END
ASC,
table1.field2 DESC,
table1.field3 ASC;
+------+--------+---------+
|field1| field2 | field3 |
+------+--------+---------+
| 1 | 4 | 1 |
+------+--------+---------+
| 2 | 3 | 2 |
+------+--------+---------+
| 9 | 2 | 4 |
+------+--------+---------+
| 10 | 1 | 7 |
+------+--------+---------+
Pour une raison quelconque le CASE
ne marche pas vraiment travailler, si j'exclus que ça marche, mais ne règle tous field1 en Commande ASC alors que je ne veux que les 10 premiers.
Bien que l'ordre est maintenant correct, pour une raison quelconque de ces 10 lignes, sont ordonnées comme cela devrait être , mais semblent être les 10 dernières rangées que je reçois, au lieu du top 10. –
@JohnJames «alors que je veux seulement le 10 d'abord.» Il semble que vous ayez besoin de «LIMIT 10» alors. Si ce n'est pas le cas, alors votre question est probablement n-values-per-group, donc je suggérerais de poser une autre question avec http://rextester.com exemple de données et résultats souhaités. – lad2025