PHPとmysqlを使用して、犬の血統を保存および読み取るための構造を作成しようとしています。
私はスタックオーバーフローでこの種の構造を見つけましたが、効率的であるようです: Inbreeding-immune database structure
TABLE people (id, name, father_id, mother_id );
TABLE relatives ( person_id, ancestor_id );
ここに実際の例があります: http://sqlfiddle.com/#!2/0bd39/10
ID で始まる順序付けられたツリーまたはサブツリー (たとえば、4 世代または 5 世代) を単純に取得することは可能ですか?
編集
最初のテーブルを使用してデータを取得しようとしています...しかし、4〜5世代では、結果のクエリは非常に重くなります。DB に大量の情報があると、家系図の取得が非常に遅くなり、使用できなくなるのではないかと心配しています。
SELECT
t1.name AS lev1, t2.name as f, ff1.name as ff1, fm1.name as fm1, t3.name as m,
mf1.name as mf1, mm1.name as mm1, .......
FROM people AS t1
LEFT JOIN people AS t2 ON t2.id = t1.father_id
LEFT JOIN people AS ff1 ON ff1.id = t2.father_id
LEFT JOIN people AS fm1 ON fm1.id = t2.mother_id
...
LEFT JOIN people AS t3 ON t3.id = t1.mother_id
LEFT JOIN people AS mf1 ON mf1.id = t3.father_id
LEFT JOIN people AS mm1 ON mm1.id = t3.mother_id
...
WHERE t1.id = 6;