Innanzitutto, la tua versione di MySQL (MariaDB 10.3) supporta espressioni di tabelle comuni, quindi hai un modo per evitare l'uso di variabili mutanti nelle tue query. La mutazione delle variabili in una query è stata un modo per eseguire query gerarchiche prima che le espressioni di tabelle comuni fossero supportate, ma è una tattica che è deprecata e per la quale non esiste alcuna garanzia documentata che funzionerà sempre come previsto.
Quindi ecco la query per fare lo stesso con un'espressione di tabella comune (cte), dove 8 è il valore di esempio (sostituirlo con l'espressione 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 ora, quando hai questa seconda tabella, puoi prima creare un'espressione di tabella comune per definire l'unione, quindi continuare come sopra:
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;