维护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));
    }
原文地址:https://www.cnblogs.com/bin-pureLife/p/5236190.html