將資料庫查詢出來的二維陣列變成一維陣列

2021-08-08 17:42:51 字數 2206 閱讀 4449

現在有角色表(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();
結果如下:

於是就可以進行相關操作了,簡便許多!

比如資料庫查出資料如下(例如在表與表之間關係是一對多的關係時,同一條記錄內容基本相同,但是某個欄位由多條記錄組成):

於是變成了兩條記錄(只有某個字段值不同,這樣不好處理,於是我想把它整合到一條記錄中,如下結果):

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(欄位名) 即可得到上述結果。

將資料庫查詢出來的資料轉化成樹形結構

從資料庫查詢的每一條資料都包含id和fid欄位,將獲得的資料轉換成樹形結構 假設從資料庫查詢出來的資料對應的實體類 public class department public department int id,int fid,string name,listlist 將獲得資料轉化成屬性結構 p...

php 合併 2次從資料庫查詢出來的 陣列

sessionid,uuid 2個字段上都有索引,但是查詢條件 sessionid or uuid yyy 不能使用索引 拆成2個sql sessionid uuid yyy 將查詢出來的結果合併 param array a param array b param callable null com...

關於Mysql資料庫時間和查詢出來的時間不一致問題

資料庫記錄的時間 mybatis查詢出來的時間 createtime 2019 06 02 17 39 02.0,lastupdatedtime 2019 06 02 18 49 05.0差了8小時。url用的是servertimezone gmtspring.datasource.url jdbc...