Постановка задачи В базе данных есть таблица меню с полем заказа.
номер заказа , но порядок неверен, и его необходимо обновить в соответствии с алфавитом другого поля заголовка.
Сортировка по полю заголовка исключена, поскольку таблица представляет собой иерархическое меню, в котором пользователь может изменить порядок, задав order_id. Использовать отдельную серверную обработку (php) тоже невыгодно — происходит лишнее разделение бизнес-логики, если это можно сделать в базе данных, а в случае больших объемов данных потребуется больше ресурсов.
Решение
В MySQL, к сожалению, нет такой возможности ROWNUM, RANK(), ROW_NUMBER() как в ORACLE или MSSQL. Наличие _rowid не имеет никакого эффекта к ситуации.
В нашем случае мы можем использовать переменные, появившиеся в пятой версии (или ранее): SET @rank=0;
SELECT @rank:=@rank+1 AS rank, id FROM menu;
Обновить такую таблицу через себя у меня не получилось, поэтому я просто скопировал таблицу под другим именем и выполнил следующий запрос: SET @rank=0;
UPDATE `menu` SET order_id=(
SELECT @rank:=@rank+1 FROM `menu2` WHERE `menu`.
id=`menu2`.
id LIMIT 1
) WHERE parentID=0 ORDER BY `title` ASC;
Оригинал
Теги: #MySQL #заказ #заказ от #Чулан
-
Новый Квантовый Процессор И Кутриты
19 Oct, 24