「mysql再帰クエリにありますか?」について質問する場合「いいえ」と答えてください。
しかし、それを処理するための非常に優れたアプローチがあります。
ヘルパーテーブルを作成します(CatHierarchyと言います)
CatHierarchy:
SuperId, ChildId, Distance
------------------------------
1 1 0
1 2 1
2 2 0
この冗長データにより、1つのクエリで任意の階層を簡単に選択でき、2つの挿入で任意の階層をサポートできます(削除はカスケード整合性の削除を利用して1つのクエリでも実行されます)。
では、これはどういう意味ですか。階層内のすべてのパスを追跡します。 Catの各ノードは、それ自体への参照を追加する必要があり(距離0)、ノードに関する冗長データを追加することで複製をサポートします。
サブでカテゴリを選択するには、次のように記述します。
SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
WHERE ch.SuperId = :someSpecifiedRootOfCat
someSpecifiedRootOfCat-categoryTHATS ALL!
のルートを指定するパラメーターです。