我有一个项目表,其中一个字段是“显示顺序”字段,用于控制项目向用户显示的顺序。我想将整个表中此字段的所有值设置为在表按特定标准集排序时获得的值 - 例如,按字母顺序排序。 注意 - 例如,我无法使用ALTER TABLE items ORDER BY item_name
更改表格的顺序;该表必须保留其原始订单。
如果我们可以假设表items
的字段item_name
包含项目名称和字段disp_order
控制显示顺序,实质上我想要做的就是这个(按字母排序):
SET @i:=0;
UPDATE items SET disp_order=(SELECT @i:=@i+1 FROM items ORDER BY item_name);
显然我不能这样做,因为我正在修改我正在选择的表格。但是,有什么方法可以在一个声明中做到这一点吗?
答案 0 :(得分:2)
ORDER BY
也适用于更新查询,因此只需:
SET @i:=0;
UPDATE items SET disp_order=@i:=@i+1 ORDER BY item_name;