0

两个月以来,我一直试图解决这个问题,但没有找到解决方案。我可以找到大量使用递归函数为我的类型表构建数据的信息,但对于我的实际数据表却没有。我可能使用了错误的术语。我想补充的是,这不是为了构建菜单,而是为了将动态表单构建到部分中。

如果我删除父列,我可以让事情正常工作,但我需要额外的级别。

这些是测试表

types
=====
id  name        parent
1   module1     0
2   module2     0
3   component1  1
4   component2  1
5   component3  2
6   component4  2

items
=====
id  name        type_id
1   item1       3
2   item2       3
3   item3       4
4   item4       4
5   item5       5
6   item6       5
7   item7       6
8   item8       6

我试图达到的结果

desired output
==============

module1
    component1
        item1
        item2
    component2
        item3
        item4
module2
    component3
        item5
        item6
    component4
        item7
        item8

这种问题有什么解决办法吗?表更改、链接或示例?谢谢。

4

2 回答 2

1

您可以使用嵌套集模型来表示层次结构。这样,您就可以取消递归调用。

您可以做的另一件事是创建一个额外的表来处理具有传递闭包的“is-a-child”关系,即您拥有节点之间的所有 is-a-descendant-of关系。

于 2012-11-08T17:50:05.580 回答
1

以下查询不起作用还是我误解了您的问题?

SELECT
    t2.`name` AS 'module',t1.`name` AS 'component',i.`name` AS 'item'
FROM (SELECT * FROM `types` WHERE `parent`>0)  t1
INNER JOIN `types` t2 ON t1.`parent`=t2.`id`
LEFT OUTER JOIN  `items` i ON i.`type_id`=t1.`id`

编辑:更改WHERE `parent`!=0WHERE `parent`>0,因为默认情况下 id 将大于 0(并且通常 - 除非明确设置 - 负整数是无效的 id)。

于 2012-11-08T17:51:38.327 回答