繁体   English   中英

MySQL-是否可以获取层次结构中的所有子项目?

[英]MySQL - Is it possible to get all sub-items in a hierarchy?

我看了看这个:

选择类别属于层次结构中任何类别的产品

它正在谈论的是CTE,这在MySQL中不存在。 我有这样的结构:

category_id | parent_category_id | name

我想检索给定category_id的所有子类别ID。 是否可以不获取层级然后遍历这些层级而实现?

这仅仅是一个邻接模型表吗? 这样一来,在不知道最大深度的情况下就不可能进行查询。

值得深思的是在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>;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM