2015-11-09 2 views
0

У меня есть таблица элементов, одно из полей которой является полем «порядок отображения», который управляет порядком, в котором элементы будут отображаться пользователю. я хотел бы установить все значения этого поля во всей таблице на значение, которое будет получено, если таблица была отсортирована по определенному набору критериев - например, в алфавитном порядке. примечание - я не могу изменить порядок таблицы, например, ALTER TABLE items ORDER BY item_name; таблица должна физически сохранять свой первоначальный заказ.mysql UPDATE для конкретного заказа в одном запросе

если мы можем предположить, таблицу items с полем item_name, содержащего имя элемента и контрольный порядок отображения поля disp_order, в сущности, то, что я хотел бы сделать это (для алфавитного порядка):

SET @i:=0; 
UPDATE items SET disp_order=(SELECT @i:[email protected]+1 FROM items ORDER BY item_name); 

Очевидно, я не могу этого сделать, потому что я изменяю таблицу, которую я выбираю. но есть ли способ сделать это в одном заявлении?

ответ

2

ORDER BY также применяется для обновления запроса, так просто:

SET @i:=0; 
UPDATE items SET [email protected]:[email protected]+1 ORDER BY item_name; 
+0

отлично! Я пропустил это в руководстве как-то. благодаря ! –

Смежные вопросы