2010-06-18 92 views

回答

3

这只是简化一个邻接模型表?那么在不知道最大深度的情况下,在一个查询中是不可能的。

深思熟虑的食物是Managing Hierarchical Data in MySQL(尽管我不主张使用嵌套集模型来定期更改数据)。

有很多(左)连接,更具体地说:尽可能多的左连接与树的最大深度一样,在一个查询中是可能的。这就是很多人倾向于保存特定类别的“深度”的原因,因此您可以过滤并将同一个表中的连接数量限制为更加合理的数量。个人而言,为了定期更改数据:我倾向于在插入/更新上配置触发器,这将根据ID保存/缓存节点的当前'路径'(例如:路径是'12/62/28/345',其中分隔符/之间的每一步都是正确顺序的父节点的主键(345的父节点是28,28的父节点是62等)),所以我可以用一个加入像这样(/用作分隔符):

SELECT j.* 
FROM tablename o 
JOIN tablename j 
WHERE j.path LIKE CONCAT (o.path,'/%') 
AND j.id != o.id -- skip parent asked for. 
WHERE o.id = <the id of the node you're looking for>; 
+0

+1为嵌套集模型 – nico 2010-06-20 20:24:48

+0

感谢您的支持! – 2010-06-22 07:50:57

相关问题