gpt4 book ai didi

php - 家谱树mysql

转载 作者:行者123 更新时间:2023-11-29 02:00:59 25 4
gpt4 key购买 nike

我正在尝试使用 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;

最佳答案

这种可能更适合 graph数据存储的风格。类似于 facebook 如何保持关系层次结构。

如果您被束缚并决定使用 MySQL,您可能可以通过使用递归搜索来摆脱您的模式。由于您的树可以具有可变深度,您可以在给定位置开始自连接并“走”下一个递归的分支,直到您找不到更多的后代。返回该分支并开始下一个分支。向上遍历寻找 parent 的过程类似。

关于php - 家谱树mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com