Как сделать сортировку mysql

Обновлено: 06.07.2024

MySQL оператор ORDER BY используется для сортировки записей в вашем результирующем наборе.

Синтаксис

Синтаксис оператора ORDER BY в MySQL:

Параметры или аргументы

expressions - столбцы или вычисления, которые вы хотите получить.

tables - таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в операторе FROM.

WHERE conditions - необязательный. Условия, которые должны быть выполнены для выбранных записей.
ASC - необязательный. Сортирует результирующий набор по expression в порядке возрастания (по умолчанию, если атрибут не указан).
DESC - необязательный. Сортирует результирующий набор по expression в порядке убывания.

Примечание

  • Если атрибуты ASC или DESC не указаны в операторе ORDER BY, результаты будут отсортированы по expression в порядке возрастания. Это эквивалентно выражению ORDER BY ASC.
  • Оператор ORDER BY может использоваться в предложениях SELECT, SELECT LIMIT и DELETE LIMIT в MySQL.

Пример сортировки без использования атрибута ASC / DESC

MySQL оператор ORDER BY может использоваться без указания атрибута ASC или DESC. Когда этот атрибут опущен в предложении ORDER BY, порядок сортировки по умолчанию равен ASC или по возрастанию.
Например:

Существует 2 направления сортировки данных в SQL-запросе. ASC – по возрастанию и DESC – по убыванию. По-умолчанию данные сортируются по возрастанию.

Пример:
[mysql]mysql> SELECT `id` FROM `table` ORDER BY `id`;
mysql> SELECT `id` FROM `table` ORDER BY `id` ASC;[/mysql]

mysql> SELECT `id` FROM `table` ORDER BY `id` DESC;

Сортировку можно производить по нескольким полям таблицы. Причем, если указано ключевое слово DESC, упорядочивание по убыванию будет произведено по полю, которое ближе всего расположено к ключевому слову DESC.
Пример:
[mysql]mysql> SELECT `id`, `lastname`, `name` FROM `table`;[/mysql]

[mysql]mysql> SELECT `id`, `lastname`, `name` FROM `table` ORDER BY `lastname`, `name`;[/mysql]

[mysql]mysql> SELECT `id`, `lastname`, `name` FROM `table` ORDER BY `lastname`, `name` DESC;[/mysql]

комментариев 19 на “Сортировка данных в MySQL”

За статью конечно большое спасибо.Но вот вопросто а чего это вы в запросе SELECT `id` FROM `table` ORDER BY `id`; id поместили в кавычки ? Я сначала тоже так запрос формировал и у меня ничего не получилось отсортировать. А когда убрал кавычки то сразу все заработало.

При запросе к базе данных существует возможность ограничить выборку по количеству возвращаемых строк. А ещё можно запросить отсортированный по какому-либо параметру результат.

Сортировка (ORDER BY)

С помощью команды ORDER BY можно сделать сортировку результата, который будет выдан из базы данных. Результат можно сортировать по значению поля. Либо в прямом направлении "ASC", либо в обратном направлении "DESC". Приведём пример использования: В конце этого запроса можно увидеть конструкцию "ORDER BY `ID` DESC", которая говорит о том, что выборка будет отсортирована по убыванию значения столбца ID. Если нужно сделать по возрастанию, то будет такой запрос: Можно сделать две сортировки. Для этого после "ORDER BY" необходимо написать через запятую название столбца и направление сортировки. К примеру, отсортируем выборку по возрастанию ID но по убыванию даты (столбец DATE):

Ограничение (LIMIT)

  • Делать выборку определённых полей, а не всех полей таблицы. Для этого после команды SELECT необходимо ставить не *, а название выбираемых полей через запятую.
  • Использовать условия WHERE, которые ограничивают размер выборки.
  • Использовать LIMIT (лимит) на количество выбираемых строк.

Установка лимита на выборку может значительно ускорить некоторые запросы к базе. Не забывайте, что чем медленнее загружаются страницы Вашего сайта, тем меньше посетителей на нём будет. Потому что люди не любят ждать загрузки страницы. Загрузка длительностью более 2 секунд отталкивает от сайта более 60% его аудитории.

Переименовывание столбца при запросе (AS)

Бывают случаи, когда необходимо переименовать столбец в результатах выборки. Зачастую это делается для упрощения последующего программирования обработки выборки. Представьте, что у нас есть таблица со столбцом, который называется "SECTION_FULL_NUMBER": Использовать такое длинное имя не хочется, поэтому попробуем его укоротить до слова "NAME". Сделать это нам поможет команда "AS", которую необходимо поставить после называния выбираемого поля, вот так: В результате выполнения такого SQL запроса мы получим таблицу, но название столбца будет заменено на 'SECTION': При переименовании в SELECT нельзя указать новое название столбца, которое будет совпадать с названием другого столбца.

Количесво строк в выборке (COUNT)

Одной из самых частых необходимостей является подсчёт количества строк вы вборке. Но как было сказано ранее, получение большого количества строк и столбцов из базы происходит довольно долго, что замедляет сайт. Поэтому не стоит пытаться подсчитывать количество строк после получения выборки. Лучше получить количество строк непосредственно из запроса. Для этого исопльзуется команда "COUNT(*)" (по английски "count" переводится как "количество"). Попробуем использовать её в SQL запросе: В результате выполнения такого запроса будет получен один столбце с одной строкой: Цифра "3" в примере означает, что в таблице было всего 3 записи (3 строчки). Если попробовать обработать данные, возвращённые базой, то может возникнуть проблема с названием столбца (в нём есть скобки и звёздочка). Поэтому воспользуемся рекомендацией из предыдущего параграфа и переименуем столбец в "CNT": Теперь результат будет легче обработать благодаря лаконичному названию столбца, содержащему только латинские буквы:

В этой статье мы расскажем о различных методах естественной сортировки MySQL с помощью условия ORDER BY . Давайте начнем урок с простых данных.

Предположим, у нас есть таблица items , которая содержит два столбца: id и item_no . Чтобы создать элементы таблицы мы используем оператор CREATE TABLE :

Мы используем оператор INSERT , чтобы добавить некоторые данные в таблицу items :

Когда мы отбираем данные и отсортируем их по признаку item_no , мы получим следующий результат:


Это не то, что мы ожидали. Мы хотели увидеть результат следующим образом:


Это называется естественной сортировкой. К сожалению, MySQL не предоставляет пользователям встроенный сценарий или функцию естественной сортировки. Оператор ORDER BY сортирует строки в линейном порядке, т.е. один символ за раз, начиная с первого символа.

Чтобы решить эту проблему, в первую очередь мы разобьем столбец item_no на два столбца: prefix и suffix .

Столбец prefix будет содержать цифровую часть item_no , а столбец suffix — буквенную. Это позволит нам отсортировать данные, используя эти два столбца, с помощью следующего запроса:

Запросив сортировку данных сначала по числовому признаку, а затем по алфавиту, мы получаем желаемый результат.

Недостатком этого решения является то, что, прежде чем добавлять или обновлять данные, мы должны делить item_no на две части. Кроме того, мы должны объединить два столбца в один, когда мы выбираем данные.

Если в item_no содержатся данные стандартного формата, вы можете использовать следующий запрос, чтобы выполнить естественную сортировку без изменения структуры таблицы.

В этом запросе мы сначала конвертируем данные item_no в целое число без дробей с помощью функции CAST . А также используем условие ORDER BY , чтобы отсортировать строки сначала по числовому признаку, а затем по алфавиту.

Давайте рассмотрим стандартный набор данных, с которыми нам часто приходится иметь дело:

Мы хотим, чтобы результат сортировки выглядел следующим образом:


Чтобы этого достичь, мы можем использовать функцию LENGTH . Обратите внимание, что функция LENGTH возвращает длину строки.

Идея состоит в том, чтобы отсортировать данные item_no по длине, а затем по значениям граф при следующем запросе:

Как видите, данные отсортированы естественно.

В случае если в вашей ситуации все выше приведенные решения неприменимы, вам придется выполнить естественную сортировку с помощью отдельных приложений.

Некоторые языки поддерживают функцию естественной сортировки, например, PHP поддерживает функцию natsort() function , которая сортирует массив с использованием алгоритмов естественной сортировки.

Читайте также: