mysql8 遞迴 實現無限極分類

2021-10-05 14:06:02 字數 3000 閱讀 3843

根據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 使用無限極分...