• 维护DOWNID


    /**-----------------------------------------处理上级无限极所有下级ID--------------------------------*/
    
        public function removeDownId($table,$val,$idColName,$in){
            $config = self::$dbNew;
            //UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def');
            $sql = "UPDATE ".$config['DB_PREFIX'].$table." SET downid = REPLACE(downid, '{$val},', '') WHERE {$idColName} in ( {$in} ) ";
            $in && self::$DB->execute($sql);
        }
    
        public function innerDownId($table,$val,$idColName,$in){
            $config = self::$dbNew;
            $sql = "UPDATE ".$config['DB_PREFIX'].$table." SET downid = CONCAT(downid,'{$val},')   WHERE {$idColName} in ( {$in} ) ";
            $in && self::$DB->execute($sql);
        }
    
        /**该方法一定要在修改本条数据之前使用;
         *@access  public
         * @param   integer   $table 那张表
         * @param   string    $currentUpid 修改后的这个表的所有上级ID
         * @param   string    $id 自己本身ID
         * @param   string    $idColName 主键名称
         * @param   return void
         **/
        public function downId($table,$currentUpid,$id,$idColName){
            //先找出本身的信息;
            $info = self::$DB->fetOne($table, $field = 'upid',$idColName .' = '.$id)['upid'];
            $new = explode(',',$currentUpid);
            $old = explode(',',$info);
            //找出将要设置的upid 和老的upid的差集
            $positive = array_diff($new,$old);
            $negative = array_diff($old,$new);
            $diff = array_merge($positive,$negative);
    
            $taskInner = array();
            $taskRemove = array();
            if(!$diff){
                //如果没有交集 两种情况
                if(in_array($new[0],$old)){
                    //没有发生变化
                }else{
                    //则旧的需要删除 新的需要添加
                    array_push($taskInner,$new);
                    array_push($taskRemove,$old);
                }
    
            }else{
                //如果有交集 我们要循环判断 属于 new 还是 old new中的需要增加 old中的需要删除
                foreach($diff as $item){
                    if(in_array($item , $new)){
                        //需要增加
                        array_push($taskInner,$item);
                    }else{
                        //需要删除
                        array_push($taskRemove,$item);
                    }
                }
            }
            $this->removeDownId($table,$id,$idColName,implode(',',$taskRemove));
            $this->innerDownId($table,$id,$idColName,implode(',',$taskInner));
        }
  • 相关阅读:
    3Sum Closest
    二叉树的下一个结点
    数组中重复的数字
    不用加减乘除做加法
    和为S的连续正数序列
    数组中只出现一次的数字
    求二叉树的是否为平衡二叉树
    由一道很简单的求两条链表的第一个公共节点的问题引发的思考
    第14章 网络编程
    第13章 文档与串行化
  • 原文地址:https://www.cnblogs.com/bin-pureLife/p/5236190.html
Copyright © 2020-2023  润新知