La risposta è nella domanda:
La parola chiave qui è "espressione" . Puoi usare le espressioni in ORDER BY
clausola.
ORDER BY -order_line_groups.sequence DESC
è un'espressione aritmetica e il "trattino" non è un trattino ma un meno; un operatore matematico meno unario.
Come funziona?
Per quanto riguarda il risultato, funziona come previsto:
-
Se il tipo di colonna
order_line_groups.sequence
è un tipo numerico o un tipo di data e ora (sono memorizzati internamente anche come numeri), quindi il meno inverte l'ordine delle righe restituite. La clausola è equivalente aORDER BY order_line_groups.sequence ASC
-
Se il tipo della colonna è un tipo di stringa quindi MySQL tenta di convertire i valori della colonna ai numeri (perché la sottrazione è un'operazione aritmetica e non è definita per le stringhe). Quando MySQL converte le stringhe in numeri, si ferma sul primo carattere che non è una cifra. A seconda dei dati che memorizzi nella colonna
order_line_groups.sequence
, più o meno dei suoi valori di stringa verranno convertiti nel numero0
.
Per quanto riguarda la velocità, come spiegato nella pagina della documentazione fornita nella domanda MySQL non può utilizzare gli indici per risolvere il ORDER BY
. Questo rende la query lenta.
Conclusione
Usando ORDER BY -order_line_groups.sequence
rende la query lenta. Inoltre, non fornisce un buon modo per ordinare il set di risultati quando il tipo di colonna sequence
è un tipo di stringa.