根据另一个字段插入序列号 - MySQL

时间:2015-10-10 16:48:25

标签: mysql sql

有一个类似的问题 Insert sequential number in MySQL

我想在表中插入序列号,但是基于另一个字段。我有两列page_numnerparent,因此具有相同父级的行应该具有page_number作为连续数字。如果父级更改,页面应该从1开始再增加1。

我正在考虑像这样使用smth

SELECT @i:=0;
SELECT @p:=0;

UPDATE my_table AS t SET page_number = CASE
WHEN @p = t.`parent` THEN @i:=@i+1 
ELSE 1 -- assign current parent to @p ??
END

但是,它无法弄清楚如何为@p案例将新父级分配到else

请注意,我正在尝试用纯mysql实现这一点(如果可能的话)

由于

1 个答案:

答案 0 :(得分:1)

您可以使用此代码执行所需操作:

set @p := -1;
set @i := 0;

UPDATE my_table t
    SET page_number = (CASE WHEN @p = t.`parent` THEN @i := @i+ 1 
                            WHEN (@p := t.parent) = NULL THEN NULL -- never happens
                            ELSE @i := 1
                       END)
    ORDER BY t.parent;

不幸的是,MySQL在同一个ORDER BY查询中不允许JOINUPDATE。如果是,您可以初始化查询中的变量。

注意第二个条件就是分配。 = NULL永远不会返回TRUE

相关问题