有个类似的问题 Insert sequential number in MySQL
我想向表中插入序号,但基于另一个字段。我有两列 page_numner
和 parent
,所以具有相同父级的行应该有 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
但是,对于 else
情况,它无法弄清楚如何将新父级分配给 @p
。
请注意,我正在尝试使用纯 mysql 实现此目的(当然如果可能的话)
谢谢
最佳答案
你可以用这段代码做你想做的事:
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 不允许在同一个UPDATE
查询中同时使用ORDER BY
和JOIN
。如果是,您可以初始化查询中的变量。
注意第二个条件只是做赋值。 = NULL
从不返回 TRUE
。
关于mysql - 根据另一个字段插入序号 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33056444/