我正在尝试使用 php 和 mysql 创建一个结构来存储和读取狗的谱系。
我在stackoverflow上发现了这种结构,而且看起来效率很高: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 代生成的查询非常繁重。我担心数据库中有大量信息,获取家谱可能会非常缓慢且无法使用。
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;