ti-enxame.com

"Ordenar por desc" na ordem inversa?

Bem-vinda,

Gostaria de saber se é possível reverter os dados retornados na classificação "ordem por desc", mas eu quero esses dados em ordem inversa.

Por exemplo, eu tenho tabela com valores

ID
1
2
3
4

E eu faço

Encomendar por ID ASC LIMIT 3, recebi

1
2
3

Quando eu faço o Pedido por ID DESC limite 3, recebo

4
3
2

Eu gostaria de ter

3
2
1

Então, eu gostaria de pedir por ASC, mas reverter os resultados. Eu estava sempre fazendo isso no lado PHP lado usando array_reverse, mas hoje eu quero perguntar a você. Talvez eu esteja errado e eu possa fazer isso apenas no Mysql.

14
marc
SELECT * 
FROM (
  SELECT ... 
  FROM ... 
  ORDER BY ID ASC 
  LIMIT 3
) AS sq 
ORDER BY ID DESC

Pense nisso como trabalhando em duas etapas. Primeiro, ele executa a consulta interna: seleciona 3 registros com os IDs mais baixos. Em seguida, na consulta externa, classifica-os em ordem decrescente.

25
Mchl

Você pode buscar as três primeiras linhas usando uma subconsulta e, em seguida, reverter a ordem dessas linhas em uma consulta externa:

SELECT *
FROM
(
    SELECT *
    FROM yourtable
    ORDER BY ID
    LIMIT 3
) T1
ORDER BY ID DESC
5
Mark Byers

Não, você não está errado. Não há diferença para qualquer quantidade sensata de dados. Array_reverse está bem.
Isso não é algo com que você se preocupe muito. Basta usar o que quiser mais - por legibilidade ou por outros motivos subjetivos

4
Your Common Sense

Você pode fazer isso com uma subconsulta:

SELECT * FROM
    (SELECT * FROM myTable ORDER BY idMyTable LIMIT 0, 3) AS r
ORDER BY r.idMyTable DESC

Recursos:

2
Colin Hebert

Você pode usar um SELECT externo para reverter a ordem:

SELECT *
FROM (
    SELECT …
    ORDER BY id ASC
    LIMIT 3
) sub
ORDER BY id DESC
0
Gumbo