Mysql Число Строк



Постановка задачи В базе данных есть таблица меню с полем заказа.

номер заказа , но порядок неверен, и его необходимо обновить в соответствии с алфавитом другого поля заголовка.

Сортировка по полю заголовка исключена, поскольку таблица представляет собой иерархическое меню, в котором пользователь может изменить порядок, задав 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 #заказ #заказ от #Чулан

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.