/**-----------------------------------------处理上级无限极所有下级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)); }