web-dev-qa-db-fra.com

"Ordre par desc" dans l'ordre inverse?

Bienvenue,

Je me demande s'il est possible d'inverser les données retournées dans le tri "ordre par desc" mais je veux ces données dans l'ordre inverse.

Par exemple, j'ai une table avec des valeurs

ID
1
2
3
4

Et je fais

Commande par ID ASC LIMIT 3 J'ai reçu

1
2
3

Quand je commande par ID DESC limite 3 j'obtiens

4
3
2

Je voudrais avoir

3
2
1

Je voudrais donc commander par ASC mais inverser les résultats. Je faisais toujours cela dans PHP côté en utilisant array_reverse, mais aujourd'hui je veux vous demander. Maybye je me trompe et je peux le faire juste dans Mysql. Cordialement

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

Considérez-le comme fonctionnant en deux étapes. Tout d'abord, il exécute la requête interne: sélectionne 3 enregistrements avec les ID les plus bas. Ensuite, dans la requête externe, il les trie par ordre décroissant.

25
Mchl

Vous pouvez récupérer les trois premières lignes à l'aide d'une sous-requête, puis inverser l'ordre de ces lignes dans une requête externe:

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

Non, vous ne vous trompez pas. Il n'y a aucune différence pour une quantité raisonnable de données. Array_reverse est correct.
Ce n'est pas une chose dont vous devez trop vous préoccuper. Utilisez simplement ce que vous aimez le plus - pour plus de lisibilité ou pour d'autres raisons subjectives

4
Your Common Sense

Vous pouvez le faire avec une sous-requête:

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

Ressources:

2
Colin Hebert

Vous pouvez utiliser un SELECT externe pour inverser l'ordre:

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