• MySQL 如何更改某一用户及伞下成员的path


    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);
  • 相关阅读:
    AC自动机【学习笔记】
    SCOI2016 背单词【Trie树,贪心】
    【字符串算法】字典树Trie入门
    USACO 1.3 Name That Number【暴搜】
    MapReduce分组
    MapReduce排序
    博客园添加访问人数统计
    MapReduce的分区
    MapReduce的计数器
    MapReduce部分源码解读(一)
  • 原文地址:https://www.cnblogs.com/cyfblogs/p/11406670.html
Copyright © 2020-2023  润新知