Сортировка в SQL по одному полю, затем по другому
Я уже как-то писал про сортировку сразу по нескольким полям в SQL. Но иногда требуется сортировка не сразу по нескольким полям, а сначала по одному, затем по-другому. Например, в курсе, который я сейчас записываю, мне потребовалось вывести 8 новинок из таблицы и отсортировать эти 8 новинок по цене. Не сразу по новизне и цене, а именно сначала новинки, а потом сортировка. Давайте с Вами разберём, как делается сортировка в SQL сначала по одному полю, затем по другому.
Безусловно, можно просто извлечь 8 новинок, а потом в PHP уже отсортировать по цене, но это весьма сомнительное решение. Вот как это можно сделать сразу в SQL:
SELECT * FROM
(SELECT * FROM `table` ORDER BY `date` DESC LIMIT 8) a
ORDER BY `price`
Как видите, получился такой достаточно хитрый запрос. Мы после первого FROM не писали название таблицы, а указали множество данных, полученных выборкой из другой таблицы. И вот из этой другой таблицы выбирается 8 новинок, а потом в полученном множестве идёт уже сортировка по цене.
Таким образом, PHP нам не потребовался, хотя абсолютное большинство в такой ситуации к этому обязательно бы прибегнули.
-
- Михаил Русаков
Комментарии (9):
Спасибо! Как раз то что нужно
Ответить
Где-то читал, что вложенные запросы затормаживают быстродействие баз данных.
Ответить
Затормаживают, но выхода нет. Через PHP сортировка будет гораздо медленнее.
Ответить
А разве нельзя в ORDER BY указывать несколько полей поочередно? Это ведь работает гораздо быстрее SELECT * FROM `table` ORDER BY `date`, `price`
Ответить
Вы попробуйте это сделать и увидите, что будет совсем другой результат.
Ответить
Только что попробовал, работает как надо. Если необходимо могу привести пример. http://www.spravkaweb.ru/mysql/sql/select >>Данные также можно отсортировать по нескольким столбцам. Для этого надо названия столбцов указать через запятую. Это может пригодиться, например, если в столбце, по которому производится сортировка, есть несколько одинаковых значений. >>Сначала данные сортируются по первому столбцу field1. Затем, если в первом столбце есть несколько одинаковых значений, выполняется дополнительная сортировка по второму столбцу (внутри группы с одинаковыми значениями в первом столбце).
Ответить
Разницу можете посмотреть здесь: http://myrusakov.ru/sql-double-order.html
Ответить
аааа, врулил... Извиняюсь, не внимательно прочитал первый абзац)
Ответить
Не могу найти что значит "a"?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.