La réponse est dans la question :
Le mot clé ici est "expression" . Vous pouvez utiliser des expressions dans le ORDER BY
clause.
ORDER BY -order_line_groups.sequence DESC
est une expression arithmétique et le "trait d'union" n'est pas un trait d'union mais un moins ; un opérateur mathématique moins unaire.
Comment ça marche ?
Concernant le résultat, cela fonctionne comme prévu :
-
Si le type de colonne
order_line_groups.sequence
est un type numérique ou un type de date et d'heure (ils sont également stockés en interne sous forme de nombres), le moins inverse l'ordre des lignes renvoyées. La clause est équivalente àORDER BY order_line_groups.sequence ASC
-
Si le type de la colonne est un type chaîne puis MySQL tente de convertir les valeurs de la colonne en nombres (parce que la soustraction est une opération arithmétique et qu'elle n'est pas définie pour les chaînes). Lorsque MySQL convertit des chaînes en nombres, il s'arrête sur le premier caractère qui n'est pas un chiffre. Selon les données que vous stockez dans la colonne
order_line_groups.sequence
, plus ou moins de ses valeurs de chaîne seront converties en nombre0
.
Concernant la vitesse, comme expliqué dans la page de documentation fournie dans la question MySQL ne peut pas utiliser les index pour résoudre le ORDER BY
. Cela ralentit la requête.
Conclusion
Utilisation de ORDER BY -order_line_groups.sequence
rend la requête lente. De plus, cela ne fournit pas un bon moyen de trier le jeu de résultats lorsque le type de colonne sequence
est un type de chaîne.