Svaret finns i frågan:
Nyckelordet här är "uttryck" . Du kan använda uttryck i ORDER BY
klausul.
ORDER BY -order_line_groups.sequence DESC
är ett aritmetiskt uttryck och "bindestrecket" är inte ett bindestreck utan ett minus; en unär minus matematisk operator.
Hur fungerar det?
Angående resultatet så fungerar det som förväntat:
-
Om kolumntypen
order_line_groups.sequence
är en numerisk typ eller en datum- och tidstyp (de lagras internt som siffror också) då vänder minus ordningen på de returnerade raderna. Klausulen är likvärdig medORDER BY order_line_groups.sequence ASC
-
Om kolumntypen är en strängtyp sedan försöker MySQL att konvertera värdena av kolumnen till siffror (eftersom subtraktionen är en aritmetisk operation och den är inte definierad för strängar). När MySQL konverterar strängar till siffror stannar det på det första tecknet som inte är en siffra. Beroende på vilken data du lagrar i kolumnen
order_line_groups.sequence
, kommer mer eller mindre av dess strängvärden att konverteras till nummer0
.
Angående hastigheten, som förklaras på dokumentationssidan som tillhandahålls i frågan MySQL kan inte använda index för att lösa ORDER BY
. Detta gör frågan långsam.
Slutsats
Använder ORDER BY -order_line_groups.sequence
gör frågan långsam. Mer, det ger inte ett bra sätt att sortera resultatuppsättningen när typen av kolumn sequence
är en strängtyp.