A resposta está na pergunta:
A palavra-chave aqui é "expressão" . Você pode usar expressões no
ORDER BY
cláusula. ORDER BY -order_line_groups.sequence DESC
é uma expressão aritmética e o "hífen" não é um hífen, mas um sinal de menos; um operador matemático unário menos.
Como funciona?
Em relação ao resultado, funciona como esperado:
-
Se o tipo de colunaorder_line_groups.sequence
é um tipo numérico ou um tipo de data e hora (eles também são armazenados internamente como números), então o menos inverte a ordem das linhas retornadas. A cláusula é equivalente a
ORDER BY order_line_groups.sequence ASC
-
Se o tipo da coluna for um tipo de string então o MySQL tenta converter os valores da coluna para números (porque a subtração é uma operação aritmética e não é definida para strings). Quando o MySQL converte strings em números, ele para no primeiro caractere que não é um dígito. Dependendo dos dados armazenados na colunaorder_line_groups.sequence
, mais ou menos de seus valores de string serão convertidos para o número0
.
Com relação à velocidade, conforme explicado na página de documentação fornecida na pergunta MySQL não pode usar índices para resolver o erro
ORDER BY
. Isso torna a consulta lenta. Conclusão
Usando
ORDER BY -order_line_groups.sequence
torna a consulta lenta. Além disso, ele não fornece uma boa maneira de classificar o conjunto de resultados quando o tipo de coluna sequence
é um tipo de string.