MySQL - 是不是可以获取层次结构中的所有子项?
Posted
技术标签:
【中文标题】MySQL - 是不是可以获取层次结构中的所有子项?【英文标题】:MySQL - Is it possible to get all sub-items in a hierarchy?MySQL - 是否可以获取层次结构中的所有子项? 【发布时间】:2010-06-18 23:14:24 【问题描述】:我看过这个:
Select products where the category belongs to any category in the hierarchy
它正在谈论 CTE,它在 mysql 中不存在。我的结构如下:
category_id | parent_category_id | name
我想检索给定 category_id 的所有子类别 ID。这是否可能在不获取层的情况下,然后循环遍历这些层?
【问题讨论】:
【参考方案1】:这只是一个邻接模型表?那么在不知道最大深度的情况下,不可能在一次查询中进行。
值得深思的是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>;
【讨论】:
以上是关于MySQL - 是不是可以获取层次结构中的所有子项?的主要内容,如果未能解决你的问题,请参考以下文章