Primero, su versión de MySQL (MariaDB 10.3) admite expresiones de tabla comunes, por lo que tiene una forma de evitar el uso de variables mutantes en sus consultas. Mutar variables en una consulta ha sido una forma de realizar consultas jerárquicas antes de que se admitieran las expresiones de tabla comunes, pero es una táctica obsoleta y para la cual no hay garantía documentada de que siempre funcionará según lo previsto.
Así que aquí está la consulta para hacer lo mismo con una expresión de tabla común (cte), donde 8 es el valor de ejemplo (reemplácelo con la expresión de PHP):
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;
Y ahora, cuando tenga esta segunda tabla, primero puede hacer una expresión de tabla común para definir la unión y luego continuar como arriba:
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;