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;
我有 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;