我看过这个:
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>;
关于sql - MySQL - 是否可以获取层次结构中的所有子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3073614/