Primeiro, sua versão do MySQL (MariaDB 10.3) suporta expressões de tabela comuns, então você tem uma maneira de evitar o uso de variáveis mutantes em suas consultas. Mudar variáveis em uma consulta tem sido uma forma de realizar consultas hierárquicas antes que as expressões de tabela comuns fossem suportadas, mas é uma tática que está obsoleta e para a qual não há garantia documentada de que sempre funcionará conforme o esperado.
Então aqui está a consulta para fazer o mesmo com uma expressão de tabela comum (cte), onde 8 é o valor de exemplo (substitua-o pela expressão 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;
E agora, quando você tem esta segunda tabela, você pode primeiro fazer uma expressão de tabela comum para definir a união e depois continuar como acima:
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;