ここで、親子関係を維持するためにこの手法をよく使用するという質問があります。つまり、すべてのエンティティをparent_id列を持つ1つのテーブルに保存し、最上位のすべての親はparent_id列に0を持っています。これは良い正規化された手法です。同意しますが、欠点もあり、遅くて非効率的です。これは主に、ツリーを作成するためにクエリを何度も実行する必要がある各親のような再帰が原因です。
SELECT id FROM `table` WHERE parent_id=something
query を何度も実行してサーバーに負荷をかけることで、任意のプログラミング言語でそれを実行しようとする可能性のあるソリューションを見てきました。ストアドプロシージャを提供しているものもありますが、再帰も含まれています。
私の質問は、ツリーの 1 つのデータベース クエリ (結合またはサブクエリ) でそれを実行できるかということです。
深さを知っている場合、または深さを知らない場合は?
可能であれば、どのようにしてどの子の最上位の親 (つまり、parent_id=0) を取得できますか?
それが不可能な場合、なぜこの手法がそれほど有名なのですか?それには欠陥がありますか、それとも別の解決策がありますか?
SQLフィドルを追加しましたが、スキーマしかありません