首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >层次/树数据查找源

层次/树数据查找源
EN

Stack Overflow用户
提问于 2015-07-21 19:51:00
回答 2查看 62关注 0票数 1

想象一下一棵树。我想追溯到给定树上任何分支的树的主干,分支中的分支数量是无限的。没有多对多的连接。

我正在记录客户,并建立了一个表来显示哪个现有客户向我们推荐了一个新客户,所以这已经扩展到了某种程度上的“家谱”。

每次有新客户加入时,我都需要知道启动一切的树原点的原始客户。

这是我的表格的一个模型,显示了2个“家庭”,其中1和11是每个家庭的树的顶部。在本例中,每个父级都有两个子级,每个编号都是客户合同号的外键。

代码语言:javascript
复制
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循环来选择一个具有特定合同号的父项,然后查看该父项是否是同一个表中的子项。我继续这个循环,直到没有返回任何行,并且我得到了答案。

我的问题是,这是最有效的方法吗,或者在PHP之外有解决方案,或者通过重新设计表?我可以看到很快就会有成百上千的“代”,我不希望它开始变得太慢。

EN

回答 2

Stack Overflow用户

发布于 2015-07-21 20:18:29

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-07-22 01:10:56

Bill Karwin做了一个很棒的幻灯片,叫做SQL Antipatterns Strike Back。从幻灯片48开始,主题转向处理树的技术。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31538286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档