将数据库查询出来的二维数组变成一维数组

现在有角色表(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(字段名) 即可得到上述结果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值