В 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.
MySQL
Данная запись опубликована в 24.04.2023 12:48 и размещена в рубрике SQL.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Октябрь 18, 2010 г.
Иногда нужно выбрать строки из базы данных в случайном порядке. При сайтостроительстве эта задача возникает довольно часто - вывести случайную тему из форума, показать в блоке случайный продвигаемый товар, показать случайный ответ посетителя за последнюю ...
Читать
Май 15, 2016 г.
Есть один феномен, связанный с внутренней сортировкой в mySQL, которая служит для реализации функционала DISTINCT (выбора уникальных значений). Если вы ...
Читать
Сентябрь 30, 2018 г.
Группировка по полю, содержащему число, используется значительно чаще, чем группировка по текстовому полю. Я думаю, вы использовали функции вроде AVG(), ...
Читать
Ноябрь 11, 2019 г.
По умолчанию для mysqldump требуются права пользователя на блокировку таблиц.
Потому, когда вы создаёте бекапы, вы можете получить сообщение вроде:
mysqldump: Got error: 1044: "Access denied for user 'USER'@'%' to database 'DATABASENAME'" when ...
Читать