如何用单条MySQL语句自动更新条目排序并维持原有顺序
单条MySQL语句重排item_order字段
现有items表数据:
id,item_order 50,2 51,3 52,6 53,5
要实现按原item_order的排序逻辑,将item_order更新为从1开始的连续递增数值,最终得到:
id,item_order 50,1 51,2 53,3 52,4
可以通过MySQL用户变量结合排序更新来实现,单条语句如下:
UPDATE items JOIN (SELECT @row_num := 0) AS init SET item_order = (@row_num := @row_num + 1) ORDER BY item_order ASC;
语句说明
- 通过子查询初始化变量
@row_num为0,用于跟踪递增序号 ORDER BY item_order ASC确保按照原有item_order的排序顺序处理记录- 更新时将
item_order赋值为自增后的@row_num,实现连续递增的效果
如果你的MySQL版本支持在同语句中先设置变量,也可以用这种写法:
SET @row_num = 0; UPDATE items SET item_order = (@row_num := @row_num + 1) ORDER BY item_order ASC;
内容的提问来源于stack exchange,提问作者khalid seleem
相关产品推荐
相关产品推荐

