我正在编辑和提供这个问题的新信息,因为我已经找到了我需要的,只是有几个关于效率的问题。
现在,我有张桌子:
category
--------------------------
category_id name parent
1 Phillips (null)
2 Barnes 1
3 Moore 2
4 de Mohrenschildt 3
5 Oswald 9
6 Hunt 2
7 Burnham 6
8 Buckley 7
9 Paine 4
10 Sturgis 6
11 Hunt 3我有一个疑问:
SELECT
t1.name AS lev1,
t2.name AS lev2,
t3.name AS lev3,
t4.name AS lev4,
t5.name AS lev5,
t6.name AS lev6
FROM category t1
LEFT JOIN category t2
ON t2.parent = t1.category_id
LEFT JOIN category t3
ON t3.parent = t2.category_id
LEFT JOIN category t4
ON t4.parent = t3.category_id
LEFT JOIN category t5
ON t5.parent = t4.category_id
LEFT JOIN category t6
ON t6.parent = t5.category_id
WHERE t1.name = 'Phillips'
ORDER BY lev2返回:
lev1 lev2 lev3 lev4 lev5 lev6
Phillips Barnes Hunt Sturgis (null) (null)
Phillips Barnes Moore de Mohr'ldt Paine Oswald
Phillips Barnes Hunt Burnham Buckley (null)对于一个新的“节点”:
SELECT
t1.name AS lev1,
t2.name AS lev2,
t3.name AS lev3,
t4.name AS lev4,
t5.name AS lev5,
t6.name AS lev6
FROM category t1
LEFT JOIN category t2
ON t2.parent = t1.category_id
LEFT JOIN category t3
ON t3.parent = t2.category_id
LEFT JOIN category t4
ON t4.parent = t3.category_id
LEFT JOIN category t5
ON t5.parent = t4.category_id
LEFT JOIN category t6
ON t6.parent = t5.category_id
WHERE t1.name = 'Moore'
ORDER BY lev2;回传
lev1 lev2 lev3 lev4 lev5 lev6
Moore Hunt (null) (null) (null) (null)
Moore de Mohr'dt Paine Oswald (null) (null)正如您所看到的,在形式上,它非常接近于此,包括一些html:
- Sturgis _knew_
- Hunt _knew_
- Moore _worked for_...希望有一天能成熟(图片中标签下面的内容).:

关于这个表和查询,我有几个问题。
1)从"Hunt“这个名字中可以看出,我可能遇到的问题是,当一个人被分配给不止一个父母时,我将不得不为他输入一个新的记录。就像将要出现的那样,我猜有5到600个独特的人,重复一遍,对我来说,很多人似乎是没有必要的。有人能找到更好的方法来处理这个问题,或者甚至是一个问题吗?我只是不喜欢裁员..。
2)沿着这些思路,如果您查看该图像,您将看到其中一些名称是红色的,表示有关该直接关系的相关信息的AJAX下拉段。因此,“亨特”可能在这个特定的分支下有一两个段落,而在其他地方的另一个分支上可能有一个段落。我在想,如果需要在表中的任何地方重复"Hunt“,可能会允许调用另一组数据来填充AJAX下拉列表。到目前为止我在这里是在自找麻烦吗?
3)由于将有那么多以不同名称开头的分支,如果必须在一个页面(许多)上运行查询40或50次,特别是在调用上面提到的一些额外数据时,这个查询是否足够有效?
我喜欢这个“模式”,如果这是正确的话,因为它看起来确实是可扩展的。这个数据库有无限增长的潜力。
我真的很感激任何人在这方面的帮助。我很高兴我终于找到了对我有用的东西(直到昨晚我才知道分层DB是什么,这就是我要找的.)
发布于 2016-09-28 00:28:39
由于深度是可变的,而且一个项目可以有多个父级,所以我推荐一般的“关系”,而不是父-子层次结构。
有关编写多到多表的最佳方法,请参见这。
然后您需要编写多个查询,而不是一个固定深度的查询。没有一种“好的”方法可以遍历树/DAG/web(直到8.0,使用CTE)。而且,具有适当索引和适当缓存的多个查询的速度应该是足够的。
https://dba.stackexchange.com/questions/150555
复制相似问题