MySQL 如何更改某一用户及伞下成员的path
在有的系统中,推荐关系的维护不只是pid那么简单,为了某些业务,可能还会需要维护path字段,path字段的存在,优点在于查询方便,最起码不用递归了,缺点呢就是不好维护,比如说要修改某一用户的上级,该用户底下还有很多的下级,比如一级下级,二级下级等等,所以如果真遇到这种情况,该怎么办呢,这里记录了一种方法(如有更好的,欢迎评论交流)
一、先更改当前用户的pid和path
1、因为更改上级,当前用户的pid和path肯定都会修改的,pid简单,值就是新的pid,path也简单,就是新上级的path再拼上新上级的id
1 $time = time();
2 $new_path = $puser['path'] ? $puser['path'].'-'.$puser['id'] : $puser['id'];//当前用户以及其下面用户的path
3 Db::name('member')->where('id',$user['id'])->update([
4 'pid'=>$puser['id'],
5 'path'=>$new_path,
6 'update_time'=>$time,
7 ]);
二、再更改伞下成员的path
这里区分两种情况:
1、该用户已经绑定了推荐关系,即上级已经形成,取$new_path 再拼上之前的path中截取当前用户id之后的部分,此处以更改1236上级为1183为例
1 -- select * from zh_member where path like '%1236%'
2 update zh_member set path = (CONCAT('1183-1236',SUBSTRING_INDEX(path , '1236' , -1))) where path like '%1236%'
2、该用户pid为0或空,这种简单点,直接取$new_path再拼上之前的path就行看了
1 $user_id = $user['id'];
2 $sql = "UPDATE zh_member set path = CONCAT('".$new_path."','-',path),update_time = ".$time." where path like '".$user_id."%'";
3 //echo $sql;die;
4 Db::query($sql);