我看过这样的:MySQL - 是否有可能获得层次结构中的所有子项?
Select products where the category belongs to any category in the hierarchy
而且这是在谈论CTE,这并不在MySQL存在。我有像这样的结构:
category_id | parent_category_id | name
我想检索给定category_id的所有子类别ID。这可能没有抓住一个层次,然后循环这些?
我看过这样的:MySQL - 是否有可能获得层次结构中的所有子项?
Select products where the category belongs to any category in the hierarchy
而且这是在谈论CTE,这并不在MySQL存在。我有像这样的结构:
category_id | parent_category_id | name
我想检索给定category_id的所有子类别ID。这可能没有抓住一个层次,然后循环这些?
这只是简化一个邻接模型表?那么在不知道最大深度的情况下,在一个查询中是不可能的。
深思熟虑的食物是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>;
+1为嵌套集模型 – nico 2010-06-20 20:24:48
感谢您的支持! – 2010-06-22 07:50:57