【问题标题】:What is the best way to load child sql to make a tree?加载子 sql 以制作树的最佳方法是什么?
【发布时间】:2017-11-01 17:45:27
【问题描述】:

从 sql server 加载数据以在 java 中创建类似树的最佳方法是什么。

我有

+----+--------+-------+
| ID | Parent | Title |
+----+--------+-------+
| 1  | NULL   | First |
| 2  | 1      | AAAAA |
| 3  | 1      | BBBBB |
| 4  | 2      | CCCCC |
+----+--------+-------+

我想加载像 (object with id 1).getChild().getChild().getTitle() 这样的对象,返回 CCCCC

我是否必须遍历 sql 结果并再次加载子项?还是有最好的办法?谢谢

【问题讨论】:

    标签: java mysql sql


    【解决方案1】:

    解决这个问题的一种方法是在 MySQL 中创建一个视图,该视图可以返回一个在 Parent=ID 上连接到自身的原始表的表,其中对应的 ID 作为新的子列。 您可以根据需要多次调用这样的视图来遍历子链接并获取标题

    对于你给出的例子:

    Given the view
       Children
    +----+-------+
    | ID | CHILD |
    +----+-------+
    | 1  | 2     |
    | 1  | 3     |
    | 2  | 4     |
    +----+-------+
    
    Select OT.Title
    From OriginalTable AS OT
         INNER JOIN Children AS CID on OT.ID = CID.ID
         INNER JOIN Children AS C1 on CID.CHILD = C1.ID
         INNER JOIN Children AS C2 on C2.CHILD = C2.ID
    WHERE OT.ID = 1
    

    这将返回 ID 为 1 的元素的子元素的子元素的所有标题。

    您可以将其抽象为以 ID 作为参数的存储过程,或重复内部连接以到达第 N 个子节点。

    【讨论】:

    • 如果我有 10 个孩子,我必须进行 10 个内部连接?
    • 如果一个节点有10个孩子,你只需要1个内连接。但是,如果您的意思是要向下遍历 10 个子级,那么是的,您需要那么多内部连接。
    猜你喜欢
    • 2023-04-09
    • 2010-11-02
    • 2012-09-02
    • 2023-03-28
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    相关资源
    最近更新 更多