2010-09-05 6 views
14

Bienvenue,"Ordre par desc" dans l'ordre inverse?

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

Par exemple, je me suis tableau avec des valeurs

ID 
1 
2 
3 
4 

Et je ne

Trier par ID ASC LIMIT 3 Je suis

1 
2 
3 

Quand je fais Trier par ID DESC LIMIT 3 je reçois

4 
3 
2 

Je voudrais avoir

3 
2 
1 

donc je voudrais à l'ordre par les résultats de l'ASC, mais revers. Je le faisais toujours du côté PHP en utilisant array_reverse, mais aujourd'hui je veux vous demander. Maybye je me trompe et je peux le faire juste à Mysql. Cordialement

+1

duplication possible de [B est le moyen de récupérer les 4 dernières lignes d'un ensemble de résultats en utilisant mysql] (http://stackoverflow.com/questions/2980220/best-way-to-fetch-last-4-rows-from-a-result-set-using -mysql) –

Répondre

5

Vous pouvez récupérer les trois premières lignes à l'aide d'un sous-requête puis d'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 
0

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

SELECT * 
FROM (
    SELECT … 
    ORDER BY id ASC 
    LIMIT 3 
) sub 
ORDER BY id DESC 
25
SELECT * 
FROM (
    SELECT ... 
    FROM ... 
    ORDER BY ID ASC 
    LIMIT 3 
) AS sq 
ORDER BY ID DESC 

Pensez-y comme travaillant en deux étapes. 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 dans l'ordre décroissant.

+0

C'est un excellent travail. – marc

+0

Mec, vous êtes génial! – user3284463

+0

Comment fonctionne cette requête! Pouvez-vous s'il vous plaît expliquer ou fournir un lien vers ce – user3284463

4

Non, vous n'avez pas tort. Il n'y a pas de différence pour une quantité raisonnable de données. Array_reverse est bon.
Ce n'est pas une chose dont vous devez trop vous préoccuper. Il suffit d'utiliser tout ce que vous aimez plus - pour une meilleure lisibilité ou d'autres raisons subjectives

2

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:

+0

Page de ressources introuvable :( – user3284463

Questions connexes