更新数据库中值为拼接字符串的字段

我们开发系统涉及权限的时候,会处理到用户和角色的关系

通常情况下,我们会建一个用户角色关系映射表:user_role_mapping

字段有id,user_id,role_id

如果某个用户有多个角色,那么在user_role_mapping表中是有多条记录的

也有特殊的处理方式

在用户表user中新建一个字段role_ids记录

如果某个用户有多个角色,那么在role_ids记录的值是 1,2,多个角色用逗号分隔

那我们批量给用户(某个组织下的用户)添加新的角色的时候该如何处理呢?

简单来说分为三种情况:

1.如果用户已经存在新增的角色,这个时候是不需要修改的,我们保持这一批用户权限不变

2.如果用户从未设置过角色(null),或者角色字段为空,我们直接给这一批用户添加权限:set role_ids = 新role_id

3.如果用户设置过多种角色(注意要排查包含新角色的情况),比如上图用户666666的角色有9和10,我们在给他添加角色11,最新的role_ids的值是9,10,11,我们需要 set role_ids = concat(role_id,'',' 新role_id')即可

综上所诉语句如下

UPDATE user set role_ids = 新role_id WHERE dept_id IN ('deptid1','deptid2') AND (role_ids  = '' OR role_ids is null);
UPDATE user set role_ids = 新role_id WHERE dept_id IN ('deptid1','deptid2') AND LENGTH(role_ids ) > 0 AND LOCATE(新role_id,role_ids ) = 0;
解释 LOCATE(新role_id,role_ids ) = 0 

返回字段 role_ids 中字符串 新role_id 第一次出现的位置,此处值为0,找不到,表示用户的多个角色并不包含新的角色

批量修改的时候需要执行以上两条语句。

猜你喜欢

转载自www.cnblogs.com/liuxiutianxia/p/11209803.html