mysql 在一个查询中针对特定排序进行更新

mysql UPDATE for specific ordering, in one query

我有 table 个项目,其中一个字段是 'display order' 字段,该字段控制项目向用户显示的顺序。我想将整个 table 中此字段的所有值设置为如果 table 按一组特定标准排序时将获得的值——例如,按字母顺序排序。 注意 - 例如,我无法将 table 的顺序更改为 ALTER TABLE items ORDER BY item_name; table 必须实际保留其原始顺序。

如果我们可以假设 table items 有一个字段 item_name 包含项目名称和一个字段 disp_order 控制显示顺序,本质上我会喜欢做的是这个(按字母顺序排列):

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

显然我不能那样做,因为我正在修改我从中选择的 table。但是有什么方法可以在一条语句中做到这一点吗?

ORDER BY也适用于更新查询,所以简单:

SET @i:=0;
UPDATE items SET disp_order=@i:=@i+1 ORDER BY item_name;