我已阅读并使用过http://www.mysqlperformanceblog.com/2011/02/14/moving-subtrees-in-closure-table/和http://www.slideshare.net/billkarwin/models-for-hierarchical-数据,但不能解决我的问题。
我的问题是:
如何维护一个整数列,该列描述了给定节点如何相对于闭包表结构中相同深度的其他节点进行排序?
目前,我正在使用以下 sql 语句插入按预期工作的新树节点:
INSERT INTO data_tree (anc, des, depth)
SELECT t.anc, :nodeValue0, t.depth+1
FROM data_tree AS t
WHERE t.des = :insertedAt
UNION ALL
SELECT :nodeValue1, :nodeValue2, 0
我想过一些不同的解决方案,但看不到解决方案。一个想法是在每次插入时在 sql 触发器中“计算”给定深度的节点顺序。另一种解决方案是更新上述语句,支持直接更新深度顺序,如:
INSERT INTO data_tree (anc, des, depth)
SELECT t.anc, :nodeValue0, t.depth+1, --> t1.depthOrder <--
FROM data_tree AS t
--> JOIN data_tree t1 'where the node order can be determined from' <--
WHERE t.des = :insertedAt
UNION ALL
SELECT :nodeValue1, :nodeValue2, 0, 0
有没有人试过这个,如何解决?