现在有角色表(shop_role : id , role_name),权限表(shop_privilege : id , pri_name),角色权限表(shop_role_privilege : role_id , pri_id)
要根据角色id选出其拥有的所有权限id。
$pids = M('RolePrivilege')->where(array('role_id'=>$id))->select();
使用 sql 查询出数据库数据如下是个二维数组,现在我只想取 pri_id 这一列数据,可以使用 php 函数array_column(array,'col_name')实现。
使用 : array_column($arr , 'pri_id' ); 之后获取的数据如下是个一维数组:
或者修改 sql 语句如下:
使用关键字 GROUP_CONCAT 连接字段值
$pids = M('RolePrivilege')->field('GROUP_CONCAT(pri_id)')->where(array('role_id'=>$id))->select();
结果如下:
加个表名再转为一维数组,使用 select 方法返回的都是二维数组,使用 find 方法返回就是一个一维数组。
$pids = M('RolePrivilege')->field('GROUP_CONCAT(pri_id) pri_id')->where(array('role_id'=>$id))->find();
结果如下:
于是就可以进行相关操作了,简便许多!
比如数据库查出数据如下(例如在表与表之间关系是一对多的关系时,同一条记录内容基本相同,但是某个字段由多条记录组成):
SELECT clientSignRule. * , individualInteraction.`interaction`
FROM `client_sign_rule_t` clientSignRule
LEFT JOIN `client_sign_rule_individual_interaction_t` individualInteraction ON clientSignRule.`id` = individualInteraction.`clientSignRuleId`
WHERE 1 =1
AND clientSignRule.`id` =1
于是变成了两条记录(只有某个字段值不同,这样不好处理,于是我想把它整合到一条记录中,如下结果):
sql 语句如下:
SELECT clientSignRule. * , GROUP_CONCAT( individualInteraction.`interaction`
SEPARATOR ',' ) AS interactions
FROM `client_sign_rule_t` clientSignRule
LEFT JOIN `client_sign_rule_individual_interaction_t` individualInteraction ON clientSignRule.`id` = individualInteraction.`clientSignRuleId`
WHERE 1 =1
AND clientSignRule.`id` =1
主要利用 GROUP_CONCAT(字段名 SEPARATOR '分隔符') 来将多个字段值统一连接到一条记录下的该字段值。分隔符默认是逗号,即GROUP_CONCAT(字段名) 即可得到上述结果。