まず、ご使用のバージョンのMySQL(MariaDB 10.3)は一般的なテーブル式をサポートしているため、クエリでの変更変数の使用を回避する方法があります。クエリ内の変数を変更することは、
したがって、これは一般的なテーブル式(cte)で同じことを行うためのクエリです。ここで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;
そして今、この2番目のテーブルがある場合、最初に共用体を定義するための共通テーブル式を実行してから、上記のように続行できます。
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;