För det första stöder din version av MySQL (MariaDB 10.3) vanliga tabelluttryck, så du har ett sätt att undvika användningen av muterande variabler i dina frågor. Att mutera variabler i en fråga har varit ett sätt att utföra hierarkiska frågor innan vanliga tabelluttryck stöddes, men det är en taktik som är utfasad och för vilken det inte finns någon dokumenterad garanti för att den alltid kommer att fungera som avsett.
Så här är frågan för att göra samma sak med ett vanligt tabelluttryck (cte), där 8 är exempelvärdet (ersätt det med PHP-uttrycket):
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;
Och nu, när du har den här andra tabellen, kan du först göra ett vanligt tabelluttryck för att definiera föreningen och sedan fortsätta som ovan:
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;