まず問題、設計データスキーマ:私は親行への外部キーでhierarchis続けます。それは単純です。
第2の問題は、昇順/子孫を検索します。:あなたが説明したように、問題はselectで選択されます:一部の人とすべての子孫を選択します。これを解決するには、新しいツリーテーブルを作成する必要があります。このテーブルには、ペアが含まれています。彼らは先祖のすべての(と自分自身)を持つ人へのアル組み合わせ:
people(id, name, id_parent)
people_tree(id, id_ancestor, distance)
Noticieこの構造の階層を照会することは容易であること。サンプル:誰かのすべての子孫:
select people.*, distance
from
people p
inner join
people_tree t
on (p.id = t.id)
where
id_ancesor = **sombody.id **
あなたが唯一の祖父母、grandwchildrenなどを取得する距離で遊ぶことができます...
最終問題、木を保つ:ツリーは最高のすべての時間でなければなりませんデータ。
:これは系譜の木なので、一人一人が両方の参照、親と母親を持っている必要があります
EDITED、CRUD操作のため
をpeople
オーバートリガーまたはストア手順:あなたはこれを自動化すべきです
people(id, name, id_parent, id_mother)
その後、2つのツリーが必要です。
parent_ancestors_tree(id, id_ancestor, distance)
mother_ancestors_tree(id, id_ancestor, distance)
デビッドサンプルデータを求めます:
people: id name id_parent id_mother
1 Adam NULL NULL
2 Eva NULL NULL
3 Cain 1 2
.. ...
8 Enoc 3 5
parent_ancestors_tree id id_ancestor distance
(Adam) 1 1 0
(Eva) 2 2 0
(Cain) 3 3 0
3 1 1
(Enoc) 8 8 0
8 3 1
8 1 2
mother_ancestors_tree id id_ancestor distance
(Adam) 1 1 0
(Eva) 2 2 0
(Cain) 3 3 0
3 2 1
(Enoc) 8 8 0
-- here ancestors of Enoc's mother --
についてです。
次の回答が参考になりますhttp://stackoverflow.com/questions/5291054/hierarchical-sql-problem/5291159#5291159 –