数据库表中设计如下:
id:主键,pid:父ID,num是int数据,class_id:是层级我现在界面上将id为1的所有numa,numb,numc,numd4个数据加1或者是减1要求将id为1的下面所有子节点的numa,numb,numc,numd的同样加1或者是减1比如:
id=1的numa,numb,numc,numd设置为19,19,19,19说明全部减1了,那么子节点全部减1也为19又比如:
id=1的numa,numb,numc,numd设置为21,19,21,19说明numa和numc加1了,而numa和numc减1了,那么相应的子节点也应该是numa和numc加1了,而numa和numc减1用代码或者是SQL均可以,我用的是mybaties这个要怎么做啊,想了几天了,实在没有好的办法了。

解决方案 »

  1.   

    写个简单的demo给你参考下@Test
        private void test() {
            String id = "1";
            String numa = "+1";
            String numb = "+1";
            String numc = "+1";
            String numd = "+1";
            //根据id查询数据
            Num num = findById(id);
            num.setNuma(numCalculate(num.getNuma, numa));
            num.setNumb(numCalculate(num.getNumb, numb));
            num.setNumc(numCalculate(num.getNumc, numc));
            num.setNumd(numCalculate(num.getNumd, numd));
            save(num);//保存更新
            //根据pid查询数据库数据集合,自己写sql
            List<Num> list = findByPid(id);
            for (Num n : list) {
                n.setNuma(numCalculate(n.getNuma, numa));
                n.setNumb(numCalculate(n.getNumb, numb));
                n.setNumc(numCalculate(n.getNumc, numc));
                n.setNumd(numCalculate(n.getNumd, numd));
            }
            save(list);//批量保存保存
        }    /**
         * @param oldNum
         * @param num
         * @return
         * @Description: 数值计算
         * @Title: numCalculate
         */
        private int numCalculate(int oldNum, String num) {
            if (num.contains("+")) {
                return oldNum + Integer.parseInt(num.split("\\+")[1]);
            } else if (num.contains("-")) {
                return oldNum - Integer.parseInt(num.split("\\+")[1]);
            }
            return oldNum;
        }
      

  2.   

    用class_id,比如更新1-2下面的所有记录:
    update 表名 set numa=numa+1,numb=numb+1,numc=numc+1,numd=numd+1 where class_id like '1-2%'
      

  3.   

    既然有class_id ,2楼的sql应该能满足你的需求
      

  4.   

    假设选择的是id为1的numa,numb,numc,numd全部减1,运行下面sql就可以达到楼主想要的效果,table是表名。UPDATE table t,(SELECT * from table WHERE find_in_set(‘1’,class_id)) tmp set 
    t.numa=(tmp.numa-1),t.numb=(tmp.numb-1),t.numc=(tmp.numc-1),t.numd=(tmp.numd-1)
    WHERE t.id=tmp.id