层次结构/树数据 - 查找原点

时间:2015-07-21 11:51:00

标签: php mysql loops database-design hierarchical-data

想象一棵树。我希望追溯到树的树干,给出树上的任何分支,树枝内的树枝数量是无限的。没有多对多的连接。

我正在记录客户,并设置了一个表格,以显示哪个现有客户向我们推荐了新客户,因此这已经扩展到某个家庭树"。

每次有新客户加入时,我都需要知道原始客户在树的起源处开始所有事情。

这是我的表格的模型,用于显示2" family",其中1和11是每个树的顶部。在此示例中,每个父母都有2个孩子,每个号码都是客户合同号的外键。

parents children
1       2
1       3
2       4
2       5
3       6
3       7
11      12
11      13
12      14
12      15
13      16
13      17

到目前为止,我一直在使用MySQL和一个PHP循环来选择父级WHERE,孩子有一个特定的合同号,然后查看该父级是否是同一个表中的子级。我保持这个循环,直到没有返回任何行,我得到答案。

我的问题是,这是最有效的方法吗,或者是PHP之外的解决方案,还是通过重新设计表格?我可以看到有数百代#34;很快,我不想让它开始变得太慢。

2 个答案:

答案 0 :(得分:1)

您正在寻找的是Nested set model。它允许在关系数据库中存储分层数据。

看看这个answer,它会告诉您如何查找任何记录的origin

答案 1 :(得分:0)

Bill Karwin做了一个名为SQL Antipatterns Strike Back的精彩幻灯片。该主题转向从幻灯片48开始处理树木的技术。

就个人而言,我喜欢闭包表技术。它易于查询,高效且使用正确的触发器,无需维护。