gpt4 book ai didi

php - 更新列数量

转载 作者:可可西里 更新时间:2023-11-01 07:22:19 25 4
gpt4 key购买 nike

我有这个表架构和数据,如果在 parentid 7 下添加了新成员,我不知道如何更新所有 parentid 7,5 和 1,例如新添加的是 10。然后他所有的 parentid 都在树(注意:最多 10 个 parent 只能从 parentid 7 开始在树中向上更新数量)7,5 和 1 将添加到 500。

CREATE TABLE `mytree` (
`pid` INT(11) NOT NULL,
`memd` INT(11) NOT NULL,
`position` CHAR(1) NOT NULL,
`amount` DECIMAL(10,2) NOT NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
;



pid memd position amount

0 1 1000.00

1 5 L 500.00

1 6 R 0.00

5 7 L 0.00

5 8 R 0.00

7 9 L 0.00

这是我的树。

enter image description here

添加新成员10后

pid          memd     position      amount

0 1 1500.00

1 5 L 1000.00

1 6 R 0.00

5 7 L 500.00

5 8 R 0.00

7 9 L 0.00

7 10 R 0.00

编辑如果父级还没有子级然后又添加了一个新的,父级不能收到500,或者父级的数量不能更新。

编辑最新问题

问题如果我有一个 child 的系列,然后其中一个 child 配对。它只会更新他的直接 parent 的数量,他 parent 的以上 parent 等。没有更新,我怎么能更新他的 parent 即使只有 1 个 child ,示例 9 和 10 也应该收到金额,因为他们是 '11'

的 parent
   pid          memd     position      amount

0 1 1500.00

1 5 L 1000.00

1 6 R 0.00

5 7 L 500.00

5 8 R 0.00

7 9 L 0.00

9 10 L 0.00

10 11 L 0.00

11 12 L 0.00

11 13 R 0.00

我怎样才能做到这一点。

提前谢谢你。

最佳答案

我想这就是你想要的

create procedure sp_update_amt(IN p_mem  INT)
BEGIN
declare cnt INT;
declare par_id INT;
declare cntr INT;
declare m_mem INT;
declare s_str VARCHAR(512);
set cntr=1;
set par_id = 1;
set m_mem = p_mem;
set s_str = '';
proc_label:BEGIN
WHILE par_id != 0 DO
SELECT pid INTO par_id FROM mytree WHERE memd=m_mem;
select count(*) into cnt FROM mytree WHERE pid=par_id;
set s_str = CONCAT(s_str,cnt,cntr,par_id,m_mem,',');
set cntr = cntr+1;
set m_mem = par_id;
IF cntr <=10 THEN
update mytree set amount = amount+500
where memd=par_id;
ELSE
update mytree set amount = amount+200
where memd=par_id;
END IF;
END WHILE;
end;
SELECT s_str;
END;

尝试上面的代码认为这会工作并解决你的问题有关详细信息,请查看 link

编辑和更新代码

我认为这可以解决您的需求。

create procedure sp_update_amt(IN p_mem  INT)
BEGIN
declare cnt INT;
declare par_id INT;
declare cntr INT;
declare m_mem INT;
declare s_str VARCHAR(512);
set cntr=1;
set par_id = 1;
set m_mem = p_mem;
set s_str = '';
proc_label:BEGIN
WHILE par_id != 0 DO
SELECT pid INTO par_id FROM mytree WHERE memd=m_mem;
select count(*) into cnt FROM mytree WHERE pid=par_id;
set s_str = CONCAT(s_str,cnt,cntr,par_id,m_mem,',');
set m_mem = par_id;
IF cnt = 2 OR cntr > 1 THEN
IF cntr <= 10 THEN
update mytree set amount = amount +500
where memd=par_id;
ELSE
update mytree set amount = amount+200
where memd=par_id;
END IF;
ELSE
LEAVE proc_label;
END IF;
set cntr = cntr+1;
END WHILE;
end;
SELECT s_str;
END;

检查您的数据和代码的链接 updated

关于php - 更新列数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27615693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com