根據id 查詢所有的父類或者子類(不包含本類)
之前實現無限極分類用的是在**層實現遞迴查詢,聽說mysql8 對遞迴查詢很友好,正好遇到這個功能,就網上搜資料實現了乙個簡單的功能,確實效能很好,由之前的0.4秒提公升到 0.01秒左右
實現的效果 :
insert into `digui` values ('1', '手機', '0');
insert into `digui` values ('2', '電腦', '0');
insert into `digui` values ('3', '家居', '0');
insert into `digui` values ('4', '美妝', '0');
insert into `digui` values ('5', '運營商', '1');
insert into `digui` values ('6', '數碼', '5');
insert into `digui` values ('7', '辦公', '2');
insert into `digui` values ('8', '家具', '3');
insert into `digui` values ('9', '家裝', '8');
insert into `digui` values ('10', '廚具', '9');
insert into `digui` values ('11', '個護清潔', '4');
insert into `digui` values ('12', '寵物', '4');
insert into `digui` values ('13', '儲存卡', '6');
insert into `digui` values ('14', '三腳架', '6');
insert into `digui` values ('15', '家紡', '3');
insert into `digui` values ('16', '收納用品', '3');
-- 查詢所有子類
with recursive type_cte as (
select * from digui where pid = 3
union all select t.* from digui t inner join type_cte type_cte2 on t.pid = type_cte2.id
) select id,name,pid from type_cte order by id asc;
-- 查詢所有父類
with recursive type_cte as (
select * from digui where id = 8
union all select t.* from digui t inner join type_cte type_cte2 on t.id = type_cte2.pid
) select id,name,pid from type_cte order by id asc
tp: 查詢父類或子類(包含本類)
echo '遞迴
'; echo '
所有子類
'; $res = db::query('with recursive type_cte as (
select * from digui where id = ?
union all select t.* from digui t inner join type_cte type_cte2 on t.pid = type_cte2.id
) select id,name from type_cte order by id asc',[5]);
$ids = array_column($res,'id');
dump($res);
echo '所有父類
'; $res = db::query('with recursive type_cte as (
select * from digui where id = ?
union all select t.* from digui t inner join type_cte type_cte2 on t.id = type_cte2.pid
) select id,name from type_cte order by id asc ',[5]);
$anmes = array_column($res,'name');
$anmes = implode('/',$anmes);
dump($anmes);
遞迴 無限極分類
遞迴無限極分類就是自身呼叫自身進行迴圈操作,有兩種辦法一種是通過等級另一種是通過資料結構進行資料迴圈 public function roles data,pid 0,levae 0 將資料轉換成陣列 d json decode json encode data true array array 將...
無限極分類,遞迴分類
有一組陣列如下 items array 1 array id 1,pid 0,name 江西省 2 array id 2,pid 0,name 黑龍江省 3 array id 3,pid 1,name 南昌市 4 array id 4,pid 2,name 哈爾濱市 5 array id 5,pid...
實現無限極分類 使用遞迴
商品分類 data 所有的分類資料 pid 父類id level 是用於區分層級關係定義的變數 function gettree data,pid 0,level 0 return arr 遞迴刪除 根據業務需求制定 function getdel data,id return arr 使用無限極分...