我遇到了一个非常特殊的问题,想在SQL中解决。我需要确保同一questionID的optionOrder从0- [任何数字]开始。

例如,questionID = 18386的行,其optionOrder现在为1,2,3,4。它们必须为0、1、2、3。

另外,如果这些行是这样的1,2,4,则必须为0,1,2

对不起,语法错误。

mysql - 修改列值使其顺序正确-LMLPHP

最佳答案

在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之外设置变量。

关于mysql - 修改列值使其顺序正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32097537/

10-10 15:07