这只是简单的一个
邻接模型
桌子?那么,如果不知道最大深度,在一个查询中是不可能的。
思考的食物是
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>;