在树建筑中检索父母和孩子

时间:2012-05-24 12:37:46

标签: database-design tree

我使用嵌套集架构在数据库中建模了父子关系。

每个孩子(叶子)都链接到一个包含开放日期的表格,但父母不是。

我希望能够检索在某个时间打开的所有叶子,以及他们的父母,如果父母的所有孩子都被打开了。

反正快速吗?我想像做出一个子请求之类的东西,但这既不漂亮也不快;最好的方法是在一个查询中完成。

我可以将嵌套集体系结构更改为另一个体系结构,以便更容易构建此请求吗?

修改

我正在使用MySql,但如果这是实现我的目标必须的话,我可以更改为任何其他数据库。

这是我的节点(父子)表的样子:

id (int)
lft (int)
rgt (int)
root_id (int , self reference to the root id, used to generate multi-rooted tree)
level (int)

name (string)
description (string)
...

我的opening_dates表格如下:

id (int)
node_id (int)
start (datetime)
end (datetime)
status (bool, 0 for an opened date, 1 for a close one)

我还补充说,我的父子不会经常更改,这就是为什么我决定采用嵌套式架构。 我的目标是在“选择查询”系统时尽可能快。

1 个答案:

答案 0 :(得分:0)

据我所知,MySQL不支持分层查询。使用Oracle非常简单,但在MySQL的情况下,您可能需要为此目的创建存储函数。 尝试阅读this howto create hierarchical query in MySQL