我正在重置具有重复值或缺少值的排序列,如下所示:
set @last='';
set @sort=NULL;
update conf_profile set sort=
if(
@last=(@last:=concat(org_id,',',profile_type_id,',',page,',',col)),
(@sort:=@sort+1),
(@sort:=0)
)
order by org_id,profile_type_id,page,col,sort,id;
(按多个关键字段逐步指定的顺序浏览所有行
要排序的递增值;当这些字段中的任何一个发生更改时,请在0重新启动。)
似乎只有在@sort变量是在执行更新之前创建的情况下才有效
(尽管它被设置成什么并不重要)。没有“set@sort”,所有
排序值设置为0或空。
你知道为什么会这样吗?mysql版本5.0.51。
更新:详细解释逻辑:在第一行,@last=(@last:=…)
将始终为false,此后,当任何键字段更改时都将为false
从上一行。(注意,没有一个关键字段是concat'd,永远不为空的)。
当它为false时,我们在0(@sort:=0)重新启动排序计数器,否则,它是
递增(@sort:=@sort+1)并使用新值。
在任何情况下,在update语句中设置@sort之前都不会使用它,所以无论
在update语句之前如何设置应该没有区别。