它正在谈论的是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>;