Для mySQL 8й версии эта статья не актуальна, т.к. там появилась целая серия замечательных функций, в том числе ROW_NUMBER(). Но пока на значительном количестве хостингов используется 5я версия.
Приём прост: требуется объявить переменную и инкрементировать её прямо в выражении SELECT.
К примеру, мы выводим список заголовков статей и хотим пронумеровать список:
|
|
set @rn = 0; SELECT @rn:=@rn + 1 as N, title FROM articles; |
Все отлично, пока мы не сортируем строки. Т.к. сортировка производится после выборки, то номера строк последуют за своими строками.
Поэтому нумерацию нужно производить с использованием вложенного запроса:
|
|
set @rn = 0; SELECT @rn:=@rn + 1 as N, title FROM (SELECT title FROM articles ORDER BY title) as articles; |
Во вложенном запросе вы выполняете всю работу — выборку, сортировку, агрегацию. А в основном запросе — только нумерацию и вывод столбцов.
См. также другую вариацию этого запроса.
MySQL
Данная запись опубликована в 06.03.2019 13:29 и размещена в рубрике SQL.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Сентябрь 30, 2018 г.
Группировка по полю, содержащему число, используется значительно чаще, чем группировка по текстовому полю. Я думаю, вы использовали функции вроде AVG(), ...
Читать
Август 3, 2022 г.
Наиболее простой ответ - это использование запроса alter, где вы задаёте новое значение для AUTO_INCREMENT нужной вам таблицы:
[crayon-6a9a209a4955d760589230/]
Вы можете достичь такого же эффекта изменениями соответствующего столбца вашей таблицы: ...
Читать
Сентябрь 24, 2025 г.
Под дублями можно иметь в виду разные условия. Возьмем как пример таблицу имен. В этой таблице есть повторяющиеся значения в поле name. Разберём практический способ удалить такие записи в MySQL с помощью одного SQL-запроса.
Пример исходной таблицы ...
Читать
Май 15, 2016 г.
Есть один феномен, связанный с внутренней сортировкой в mySQL, которая служит для реализации функционала DISTINCT (выбора уникальных значений). Если вы ...
Читать