Tout d'abord, votre version de MySQL (MariaDB 10.3) prend en charge les expressions de table courantes, vous avez donc un moyen d'éviter l'utilisation de variables mutantes dans vos requêtes. La mutation de variables dans une requête a été un moyen d'effectuer des requêtes hiérarchiques avant que les expressions de table communes ne soient prises en charge, mais il s'agit d'une tactique obsolète et pour laquelle il n'y a aucune garantie documentée qu'elle fonctionnera toujours comme prévu.
Voici donc la requête pour faire la même chose avec une expression de table commune (cte), où 8 est la valeur d'exemple (remplacez-la par l'expression 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;
Et maintenant, lorsque vous avez cette deuxième table, vous pouvez d'abord créer une expression de table commune pour définir l'union, puis continuer comme ci-dessus :
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;