"Порядок по убыванию" в обратном порядке?

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

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

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

ID
1
2
3
4

И я делаю

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

1
2
3

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

4
3
2

Я хотел бы иметь

3
2
1

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

Вы можете сделать это с помощью дополнительного запроса:

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

Ресурсы:

Ответ 5

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

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