我有一个带有列的表格id, name, position, old_position
.
专栏old_position
包含用于在进行选择时定义顺序的唯一编号。但这些数字不是连续的(即使已订购)。例如。
2、12、11、14、20、35、45、28、
我想要实现的是填充该列position
从 1 开始的连续数字,但根据 old_position 具有相同的顺序,所以当我按position ASC
我仍然可以获得相同的行顺序。有没有办法做到这一点 ?
Thanks
假如说id
每行都是唯一的,您可以使用变量来做到这一点:
update <table> t join
(select t.id, @rn := @rn + 1 as seqnum
from <table> t cross join (select @rn := 0) vars
order by old_position
) tt
on tt.id = t.id
set t.position = tt.seqnum;
如果您愿意,您可以在不使用子查询的情况下编写此代码。挑战在于定义变量。这是一种方法:
update <table> t
set t.position = (@rn := coalesce(@rn, 0) + 1)
order by old_position;
你不能在子查询中初始化变量,因为 MySQL 不允许这两者join
and order by
in an update
陈述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)