将列值修改为它们的顺序

时间:2015-08-19 13:52:52

标签: mysql sql

我有一个非常特殊的问题,我想在SQL中解决。我需要确保相同questionID的optionOrder来自0- [任意数字]。

例如, questionID = 18386 的行,他们的 optionOrder 现在是 1,2,3,4 。他们需要 0,1,2,3

如果行类似 1,2,4 ,则需要 0,1,2

我对不正确的语法感到抱歉。

enter image description here

1 个答案:

答案 0 :(得分:2)

在MySQL中,您可以使用变量执行此操作:

set @rn := 0;
set @q := -1;

update table t
    set optionorder = (case when @q = questionid then (@rn := @rn + 1)
                            when (@q := questionid) is not null then (@rn := 0)
                            else -1 -- should never happen
                       end)
    order by questionid, optionorder;

由于order by,您需要将变量设置在update之外。