【发布时间】:2015-06-10 22:52:31
【问题描述】:
我问了这个问题previously,但这是针对两层树的,我得到的解决方案非常有效。
我现在有一个多级树(最多 3 个,但假设将来可能会有更多。
我的代码目前如下所示:
SELECT * FROM fin_document AS finl
LEFT OUTER JOIN fin_document AS finl2
ON finl2.id = finl.parent_line_id
ORDER BY
CASE WHEN finl2.ordinal IS NULL THEN finl.ordinal
ELSE concat(finl2.ordinal,'-',finl.ordinal) END
让我们假设一棵与之前类似的树:
(id) (Item) (#) (parent_line_id)
1234 - Car - 1 - null
0000 - Boat - 2 - null
2222 - House - 4 - null
6545 - Bike - 5 - null
6547 - Wheels - 0 - 1234
4442 - Bed - 1 - 2222
1474 - Sink - 0 - 2222
9456 - Tires - 0 - 6547 *New item, child of wheels
8975 - L.Nuts - 1 - 6547 *New item, child of wheels
哦,#列是“序数”
那么,我如何才能让不止一位家长对此进行正确排序?
正确的排序应该如下所示:
(id) (Item) (#) (parent_line_id)
1234 - Car - 1 - null
6547 - Wheels - 0 - 1234
9456 - Tires - 0 - 6547
8975 - L.Nuts - 1 - 6547
0000 - Boat - 2 - null
2222 - House - 4 - null
1474 - Sink - 0 - 2222
4442 - Bed - 1 - 2222
6545 - Bike - 5 - null
注意:我无法更改表格。我只能从表中提取数据,因为这些表是由我们使用的另一家公司管理的。我知道如果有更多的孩子,他们会变得越来越复杂,但我认为我的公司将使用这个的孩子不会超过 3-4 个。不幸的是,由于这种复杂性,这就是为什么我不得不回到这里再次询问:(
【问题讨论】:
-
这将是一次重组,所以我将其作为评论而不是答案。邻接表模型相当不灵活,并且随着大小的增长变得更加复杂。更好的选择(不是最好的)是使用here 描述的嵌套集合模型。最好的选择是为您的结构使用图表,为数据使用 rdbms,但这是另一个主题。
-
我假设您的意思是原始表格的结构。这次我忘了提,但我无法更改表格。我只能从表中提取数据,因为这些表是由我们使用的另一家公司管理的。感谢您提醒我这一点。