mysql find_in_set用法 以及group_concat()函数

      菜鸟自己做php后台权限管理的时候碰到一个问题,连表查询

建表sql

/*********权限表********/
drop table if exists my_privilege;
create table my_privilege(
id mediumint unsigned not null auto_increment comment 'id',
pri_name varchar(30) not null comment '权限名称',
module_name varchar(30) not null comment '模块名',
controller_name varchar(30) not null comment '控制器名',
action_name varchar(30) not null comment '方法名',
parent_id mediumint unsigned not null default '0' comment '上级权限的id',
pri_level tinyint unsigned not null default '0' comment'权限的级别。0:代表第一级:1:代表第二级',
primary key (id)
)engine myisam charset=utf8;
/******角色表******/
drop table if exists my_role;
create table my_role(
id mediumint unsigned not null auto_increment comment 'id',
role_name varchar(30) not null comment '角色名称',
pri_id varchar(150) not null default '' comment '权限id,如果有多个用逗号隔开,如1,2,3',
primary key (id)
)engine myisam charset=utf8 comment'角色';

2表示多对多的关系

一个角色拥有多个权限

一个权限可以被多个权限拥有


角色添加完成过后,显示所拥有的权限显示的是权限id,要变成权限的名称

用2表连接查询的时候不知道怎么弄,搜了半天可以用 a left join b on find_in_set(b.id,a.id) 这样的语句来查询

然后用group_concat()函数来分割权限的名称  ,再然后根据id分组进行查询

具体sql  

select a.*, group_concat(b.pri_name)  from my_role a left join my_privile
ge b on find_in_set(b.id,a.pri_id) group by a.id;

这样就可以查询出对应的权限名称.本人sql纯属菜鸟,

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值