Для 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.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Февраль 13, 2018 г.
Ещё одна шпаргалка по администрированию UNIX серверов. На этот раз рассмотрим несколько полезных команд для создания бекапа базы данных из консоли.
Нам понадобится команда mysqldump, которая позволяет создавать sql скрипт базы или её части.
Создание ...
Читать
Ноябрь 11, 2019 г.
По умолчанию для mysqldump требуются права пользователя на блокировку таблиц.
Потому, когда вы создаёте бекапы, вы можете получить сообщение вроде:
mysqldump: Got error: 1044: "Access denied for user 'USER'@'%' to database 'DATABASENAME'" when ...
Читать
Март 19, 2017 г.
Можно действовать разными способами, в зависимости от ситуации. Мне требовалось вытащить данные из проекта на Python/Django/PostgreSQL, чтобы потом экспортировать ...
Читать
Февраль 4, 2019 г.
Недавно обнаружил, что в mySQL целых три аналога PHP функции strpos.
INSTR(str,substr) - возвращает индекс первого найденного совпадения substr ...
Читать