В MSSQL есть функция ROW_NUMBER(), которая нумерует строки выборки. В MySQL такой функции пока нет, но мы можем использовать трюк с переменными для достижения нужного эффекта.
К примеру, вы хотите выбрать название книг и пронумеровать список. Изначально запрос выглядит как то так:
|
|
SELECT book_title FROM books; |
Так как специализированной функции нет, используем в запросе переменную.
|
|
SELECT @count := @count + 1, book_title FROM books, (SELECT @count := 0) r; |
Подзапрос (SELECT @count := 0) выполняет роль не только инициализации переменной @count, но так же и временного хранилища.
Если вы попробуете избавиться от подзапроса, например так:
|
|
SELECT @count := IFNULL(@count, 0) + 1, book_title FROM books; |
то нужного эффекта достичь не удастся, т.к. переменная будет создаваться для каждой строки независимо и все строки получат номер 1.
Данная запись опубликована в 24.04.2023 12:48 и размещена в рубрике mySQL.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Ноябрь 5, 2016 г.
Что делать, если нужно пронумеровать строки прямо в запросе? Полистав руководство MySql 5.5, нужной функции я не нашел.
Мне нужно было сохранять позиции пользователей в рейтинге, т.е. пронумеровать пользователей в зависимости от значения их рейтинга. ...
Читать
Ноябрь 11, 2019 г.
По умолчанию для mysqldump требуются права пользователя на блокировку таблиц.
Потому, когда вы создаёте бекапы, вы можете получить сообщение вроде:
mysqldump: Got error: 1044: "Access denied for user 'USER'@'%' to database 'DATABASENAME'" when ...
Читать
Май 15, 2016 г.
Есть один феномен, связанный с внутренней сортировкой в mySQL, которая служит для реализации функционала DISTINCT (выбора уникальных значений). Если вы ...
Читать
Февраль 13, 2018 г.
Ещё одна шпаргалка по администрированию UNIX серверов. На этот раз рассмотрим несколько полезных команд для создания бекапа базы данных из консоли.
Нам понадобится команда mysqldump, которая позволяет создавать sql скрипт базы или её части.
Создание ...
Читать