私はPHP/MySQL/Javascriptでプログラミングしています。ティアの数に制限のない、子/親の関係でリンクしたいパーツのリストがあります。
パーツのリストから選択して子を親に追加する場合、パーツのリストを制限して、親自体と、すでにその親の子であるパーツを除外します。
私が発見したのは、親の祖父母も除外したいということです。そうしないと、近親相姦の関係が得られ、パーツのツリーを表示すると無限ループが作成されます。
それだけでなく、子の部分を親の曽祖父母や曽祖父母にすることはできません。
これが私が現在使用しているSQLステートメントです。これを使用することで改善できると思いますが、現時点ではSQLに精通してLEFT JOIN
いません。
SELECT *
FROM sch_part_general
WHERE (sch_part_general.part_id <> $parentId)
AND (sch_part_general.part_id NOT IN
(SELECT part_id FROM sch_part_mapping WHERE parent_id = $parentId)
)
sch_part_generalは、part_idを主キーとする、すべての部分を含む複数列のテーブルです。sch_part_mappingは、part_id(子)を持つ2列のマッピングテーブルです|| parent_id(親)。
誰かがSQLクエリで私を正しい方向に向けることができますか?これは非常に非効率的だと思うので、whileループを使用してSQLステートメントを作成することに熱心ではありませんが、これがこれまでのところ機能すると考えた唯一の方法です。