【发布时间】:2013-02-18 13:51:12
【问题描述】:
我正在尝试使用 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;
【问题讨论】:
-
你的问题不好解决。您可以在我的 pedigree Web 应用程序中查看(在知识共享许可下),但请注意这是一个测试版和德语(对不起!)。 link
-
我知道这并不容易解决..我正在尝试找到一些建议来使用 mysql 限制的最佳结构。
标签: php mysql tree hierarchical-data