Для 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; |
Во вложенном запросе вы выполняете всю работу — выборку, сортировку, агрегацию. А в основном запросе — только нумерацию и вывод столбцов.
Данная запись опубликована в 06.03.2019 13:29 и размещена в рубрике mySQL.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Март 19, 2017 г.
Можно действовать разными способами, в зависимости от ситуации. Мне требовалось вытащить данные из проекта на Python/Django/PostgreSQL, чтобы потом экспортировать ...
Читать
Июнь 15, 2018 г.
Для начала выберем функцию с подходящей гранулярностью. DATEDIFF явно не подходит, т.к. даёт разницу в кол-ве целых дней. К счастью, есть аналогичная функция - TIMEDIFF, которая вычисляет разницу с точностью до микросекунд.
Результат работы TIMEDIFF ...
Читать
Август 26, 2015 г.
MySQL позволяет использовать курсоры (CURSORs) в хранимых процедурах. Эта конструкция позволяет организовать сложную обработку данных на стороне сервера ...
Читать
Май 10, 2019 г.
Если вы пользуетесь phpMyAdmin или похожим менеджером баз данных, то привыкли видеть размеры таблиц в списке.
Порою, нет возможности установить дополнительные инструменты на сервер, но это не страшно, т.к. требуемую информацию получить не сложно. ...
Читать