加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

编辑
如果父母没有孩子然后添加了新的孩子,则父母不能收到500,或者父母的数量没有更新.

编辑最新的问题

问题如果我有一个孩子的系列,然后其中一个孩子配对.,它只会更新他的直接父母的数量,他的父母的上述父母等..,没有更新,我怎么能更新他的父母即使它只有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;

尝试上面的代码认为这将工作并解决您的问题
有关详细信息,请查看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,');      
      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的链接

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读