包含级联更新的MySQL脚本中的While循环

包含级联更新的MySQL脚本中的While循环,mysql,loops,while-loop,Mysql,Loops,While Loop,所以我有这个表(为了简单而缩短),我有一个特制的while循环,但是我知道我做错了什么,或者只是不理解MySQL中的while循环 示例表是 sample_table --------------------------------- entity_id parent_id int_1 --------------------------------- 1 0 5 7 1 0 10

所以我有这个表(为了简单而缩短),我有一个特制的while循环,但是我知道我做错了什么,或者只是不理解MySQL中的while循环

示例表是

sample_table
---------------------------------
entity_id     parent_id     int_1
---------------------------------
1             0             5
7             1             0
10            1             3
11            10            2
12            11            0
13            11            0
int_1是子对象的数量,实体是树结构的实体

1---7
|
10--11---12
|
13
我想在输入另一个分支或子对象(即entity_id 14)后更新子对象的数量这已经通过一个SQL脚本通过一个稍微简单的过程设置好了,但是添加之后,我得到了这个表

entity_id     parent_id     int_1
---------------------------------
1             0             5
7             1             0
10            1             3
11            10            2
12            11            0
13            11            0
14            13            0
我想我可以在脚本更新后添加这个,注意@parent_实体已经在脚本中预先定义好了

while @parent_entity > 0 do
    update sampe_table set int_1=int_1+1 where entity_id = @parent_entity;
    set @parent_entity = (select parent_id from sample_table where entity_id = @parent_entity);
end while
这显然不管用,否则我就不会问了

我必须把这个放进程序里吗?是因为@parent_实体已经预定义了吗

我要查找的结果表是

entity_id     parent_id     int_1
---------------------------------
1             0             6
7             1             0
10            1             4
11            10            3
12            11            0
13            11            1
14            13            0

非常感谢任何有用的东西

好的,循环是正确的,但我确实需要按照说明进行操作,这样对我来说才有效

delimiter $$
create procedure updatechildcount()
begin
    while @parent_entity > 0 do
        update sampe_table set int_1=int_1+1 where entity_id = @parent_entity;
        set @parent_entity = (select parent_id from sample_table where entity_id = @parent_entity);
    end while;
end $$
delimiter ;
是的,就是这么简单,谢谢帕拉_

为了运行它


调用updatechildcount()

它需要在一个过程中进行,我很想查看嵌套集instead@pala_如果它需要进入一个过程,那么为什么它不这样说呢?在一个例子中,它肯定有,但它从来没有在文档中说它必须进入一个过程。如果你备份到它的祖父母文档项,它确切地说,好吧,我确实在你回答时读到了,但让我问你,如果是这样,我将它保存为一个过程,那么我是否必须在过程中声明@parent_entity,因为它是在调用过程的脚本中创建的?但我仍然认为这有点模糊,它从来没有明确指出,虽然循环只在过程中,但它说它们可以包含。。。但我们正在分裂头发