For det første understøtter din version af MySQL (MariaDB 10.3) almindelige tabeludtryk, så du har en måde at undgå brugen af muterende variabler i dine forespørgsler. Mutation af variabler i en forespørgsel har været en måde at udføre hierarkiske forespørgsler før almindelige tabeludtryk blev understøttet, men det er en taktik, der er forældet, og som der ikke er nogen dokumenteret garanti for, at den altid vil virke efter hensigten.
Så her er forespørgslen om at gøre det samme med et almindeligt tabeludtryk (cte), hvor 8 er eksempelværdien (erstat den med PHP-udtrykket):
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;
Og nu, når du har denne anden tabel, kan du først lave et fælles tabeludtryk for at definere foreningen og derefter fortsætte som ovenfor:
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;