Svaret er i spørgsmålet:
Søgeordet her er "udtryk" . Du kan bruge udtryk i ORDER BY
klausul.
ORDER BY -order_line_groups.sequence DESC
er et aritmetisk udtryk og "bindestregen" er ikke en bindestreg, men et minus; en unær minus matematisk operator.
Hvordan virker det?
Med hensyn til resultatet fungerer det som forventet:
-
Hvis typen af kolonne
order_line_groups.sequence
er en numerisk type eller en dato- og tidstype (de er også internt gemt som tal) så vender minus rækkefølgen af de returnerede rækker. Klausulen svarer tilORDER BY order_line_groups.sequence ASC
-
Hvis kolonnetypen er en strengtype derefter forsøger MySQL at konvertere værdierne af kolonnen til tal (fordi subtraktionen er en aritmetisk operation, og den er ikke defineret for strenge). Når MySQL konverterer strenge til tal, stopper det på det første tegn, der ikke er et ciffer. Afhængigt af de data, du gemmer i kolonnen
order_line_groups.sequence
, vil mere eller mindre af dens strengværdier konverteres til nummer0
.
Med hensyn til hastigheden, som forklaret på dokumentationssiden i spørgsmålet, kan MySQL ikke bruge indekser til at løse ORDER BY
. Dette gør forespørgslen langsom.
Konklusion
Brug af ORDER BY -order_line_groups.sequence
gør forespørgslen langsom. Mere, det giver ikke en god måde at sortere resultatsættet på, når typen af kolonne sequence
er en strengtype.