Для 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.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Март 19, 2017 г.
Можно действовать разными способами, в зависимости от ситуации. Мне требовалось вытащить данные из проекта на Python/Django/PostgreSQL, чтобы потом экспортировать ...
Читать
Ноябрь 2, 2012 г.
О полезном операторе - SQL_CALC_FOUND_ROWS. Это конструкция просто незаменима для организации постраничного вывода каких либо данных. Все время забываю синтаксис, приходится каждый раз искать. Решил записать в блоге, чтобы уж не терять :).
Во всех ...
Читать
Май 10, 2019 г.
Если вы пользуетесь phpMyAdmin или похожим менеджером баз данных, то привыкли видеть размеры таблиц в списке.
Порою, нет возможности установить дополнительные инструменты на сервер, но это не страшно, т.к. требуемую информацию получить не сложно. ...
Читать
Февраль 4, 2019 г.
Недавно обнаружил, что в mySQL целых три аналога PHP функции strpos.
INSTR(str,substr) - возвращает индекс первого найденного совпадения substr ...
Читать