Erstens unterstützt Ihre MySQL-Version (MariaDB 10.3) allgemeine Tabellenausdrücke, sodass Sie die Verwendung mutierender Variablen in Ihren Abfragen vermeiden können. Das Mutieren von Variablen in einer Abfrage war eine Möglichkeit, hierarchische Abfragen durchzuführen bevor allgemeine Tabellenausdrücke unterstützt wurden, aber es ist eine Taktik, die veraltet ist und für die es keine dokumentierte Garantie gibt, dass sie immer wie beabsichtigt funktioniert.
Hier ist also die Abfrage, um dasselbe mit einem allgemeinen Tabellenausdruck (cte) zu tun, wobei 8 der Beispielwert ist (ersetzen Sie ihn durch den PHP-Ausdruck):
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;
Und jetzt, wenn Sie diese zweite Tabelle haben, können Sie zuerst einen allgemeinen Tabellenausdruck zum Definieren der Vereinigung erstellen und dann wie oben fortfahren:
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;