我看过这个:
Select products where the category belongs to any category in the hierarchy
它正在谈论CTE,它在MySQL中不存在。我的结构如下:
category_id | parent_category_id | name
我想检索给定category_id的所有子类别id。这是否可能没有抓住一层,然后循环通过那些?
答案 0 :(得分:3)
这只是一个简单的邻接模型表?然后在不知道最大深度的情况下在一个查询中是不可能的。
值得深思的是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>;