php – 更新列数量
发布时间:2020-12-13 17:48:09 所属栏目:PHP教程 来源:网络整理
导读:我有这个表模式和数据,我不知道如何更新所有parentid 7,5和1如果在parentid 7下添加了新成员示例新添加的是10.然后他所有的parentid都在树上(注意:最多10个父母只开始parentid 7在树上可以更新那里数量)7,5和1将被添加到500. CREATE TABLE `mytree` ( `pid`
我有这个表模式和数据,我不知道如何更新所有parentid 7,5和1如果在parentid 7下添加了新成员示例新添加的是10.然后他所有的parentid都在树上(注意:最多10个父母只开始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 这是我的树. 添加新成员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 编辑 编辑最新的问题 问题如果我有一个孩子的系列,然后其中一个孩子配对.,它只会更新他的直接父母的数量,他的父母的上述父母等..,没有更新,我怎么能更新他的父母即使它只有1个孩子,例9和10也应该收到金额,因为他们是’11’的父母 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; 尝试上面的代码认为这将工作并解决您的问题 编辑和更新的代码 我认为这将解决您的要求. 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,'); 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的链接 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |