सबसे पहले, MySQL का आपका संस्करण (MariaDB 10.3) सामान्य तालिका अभिव्यक्तियों का समर्थन करता है, इसलिए आपके पास अपने प्रश्नों में परिवर्तनशील चर के उपयोग से बचने का एक तरीका है। क्वेरी में परिवर्तनशील चर श्रेणीबद्ध क्वेरी निष्पादित करने का एक तरीका रहा है। सामान्य तालिका अभिव्यक्तियों का समर्थन करने से पहले, लेकिन यह एक ऐसी रणनीति है जिसे बहिष्कृत कर दिया गया है और जिसके लिए कोई दस्तावेजी गारंटी नहीं है कि यह हमेशा इरादा के अनुसार काम करेगा।
तो यहां एक सामान्य तालिका अभिव्यक्ति (सीटीई) के साथ ऐसा करने की क्वेरी है, जहां 8 उदाहरण मान है (इसे 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;
और अब, जब आपके पास यह दूसरी तालिका है, तो आप पहले संघ को परिभाषित करने के लिए एक सामान्य तालिका अभिव्यक्ति कर सकते हैं, और फिर ऊपर के रूप में जारी रख सकते हैं:
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;