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.