Die Antwort liegt in der Frage:
Das Schlüsselwort hier ist "Ausdruck" . Sie können Ausdrücke in ORDER BY
verwenden Klausel.
ORDER BY -order_line_groups.sequence DESC
ist ein arithmetischer Ausdruck und der "Bindestrich" ist kein Bindestrich, sondern ein Minus; ein unärer minus mathematischer Operator.
Wie es funktioniert?
Hinsichtlich des Ergebnisses funktioniert es wie erwartet:
-
Wenn der Spaltentyp
order_line_groups.sequence
ist ein numerischer Typ oder ein Datums- und Zeittyp (sie werden intern auch als Zahlen gespeichert), dann kehrt das Minus die Reihenfolge der zurückgegebenen Zeilen um. Die Klausel ist äquivalent zuORDER BY order_line_groups.sequence ASC
-
Wenn der Typ der Spalte ein String-Typ dann versucht MySQL, die Werte umzuwandeln der Spalte zu Zahlen (weil die Subtraktion eine arithmetische Operation ist und nicht für Zeichenketten definiert ist). Wenn MySQL Strings in Zahlen umwandelt, stoppt es beim ersten Zeichen, das keine Ziffer ist. Abhängig von den Daten, die Sie in der Spalte
order_line_groups.sequence
hinterlegen , werden mehr oder weniger seiner Zeichenfolgenwerte in die Zahl0
umgewandelt .
In Bezug auf die Geschwindigkeit, wie auf der Dokumentationsseite in der Frage erläutert, kann MySQL keine Indizes verwenden, um den ORDER BY
aufzulösen . Dadurch wird die Abfrage langsam.
Schlussfolgerung
Verwenden von ORDER BY -order_line_groups.sequence
macht die Abfrage langsam. Darüber hinaus bietet es keine gute Möglichkeit, die Ergebnismenge zu sortieren, wenn der Spaltentyp sequence
ist ist ein String-Typ.