Ten eerste ondersteunt uw versie van MySQL (MariaDB 10.3) veelvoorkomende tabelexpressies, zodat u het gebruik van muterende variabelen in uw query's kunt vermijden. Het muteren van variabelen in een query was een manier om hiërarchische query's uit te voeren voordat algemene tabeluitdrukkingen werden ondersteund, maar het is een tactiek die is verouderd en waarvoor geen gedocumenteerde garantie is dat deze altijd zal werken zoals bedoeld.
Dus hier is de vraag om hetzelfde te doen met een algemene tabeluitdrukking (cte), waarbij 8 de voorbeeldwaarde is (vervang deze door de PHP-uitdrukking):
with recursive
cte as (
select 1 as categoryDepth,
c.*
from tbl_categories c
where categoryId = 8
union
select cte.categoryDepth + 1,
c.*
from cte
inner join tbl_categories c
on c.categoryId = cte.categoryParentId
)
select *
from cte
order by categoryDepth desc;
En nu, als je deze tweede tabel hebt, kun je eerst een algemene tabeluitdrukking doen om de unie te definiëren, en dan verder gaan zoals hierboven:
with recursive
base as (
select * from tbl_categories
union
select * from tbl_categories_custom
),
cte as (
select 1 as categoryDepth,
base.*
from base
where categoryId = 8
union
select cte.categoryDepth + 1,
base.*
from cte
inner join base
on base.categoryId = cte.categoryParentId
)
select *
from cte
order by categoryDepth desc;