«Заказ по деск» в обратном порядке? - PullRequest
14 голосов
/ 05 сентября 2010

Добро пожаловать,

Мне интересно, возможно ли сторнировать возвращенные данные в сортировке "порядок по деск", но я хочу, чтобы эти данные были в обратном порядке.

Например, я получил таблицусо значениями

ID
1
2
3
4

И я делаю

Заказ по ID ASC LIMIT 3 Я получил

1
2
3

Когда я делаю Заказ по ID DESC предел 3 я получаю

4
3
2

Я хотел бы получить

3
2
1

Так что я хотел бы заказать по ASC, но результаты меняются.Я всегда делал это на стороне PHP, используя array_reverse, но сегодня я хочу спросить вас.Может, я не прав, и я могу сделать это только в Mysql.Привет

Ответы [ 5 ]

25 голосов
/ 05 сентября 2010
SELECT * 
FROM (
  SELECT ... 
  FROM ... 
  ORDER BY ID ASC 
  LIMIT 3
) AS sq 
ORDER BY ID DESC

Думайте об этом как о работе в два этапа. Сначала он выполняет внутренний запрос: выбирает 3 записи с наименьшими идентификаторами. Затем во внешнем запросе он сортирует их в порядке убывания.

5 голосов
/ 05 сентября 2010

Вы можете получить первые три строки, используя подзапрос, а затем изменить порядок этих строк во внешнем запросе:

SELECT *
FROM
(
    SELECT *
    FROM yourtable
    ORDER BY ID
    LIMIT 3
) T1
ORDER BY ID DESC
4 голосов
/ 05 сентября 2010

Нет, вы не ошиблись.Там нет никакой разницы для любого разумного количества данных.Array_reverse - все в порядке.
Это не то, о чем вы должны беспокоиться слишком сильно.Просто используйте то, что вам больше нравится - для удобства чтения или по другим субъективным причинам

2 голосов
/ 05 сентября 2010

Это можно сделать с помощью подзапроса:

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

Ресурсы:

0 голосов
/ 05 сентября 2010

Вы можете использовать внешний SELECT, чтобы изменить порядок:

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