开发者

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

I have looked at this:

Select products where the category belongs to any category in the hierarchy

And it is talking about CTE, which doesn't exist in MySQL. I have structure like:

category_id | parent_category_id | name

I want to retrieve all the sub-categories ids of a given category_id. Is this possible without grabbing a tier, then looping through those开发者_StackOverflow?


This is just simpy a Adjacency Model table? Then it is not possible in one query without knowing the maximum depth.

Food for thought is Managing Hierarchical Data in MySQL (although I don't advocate using the Nested Set Model for data that alter regularly).

With a lot of (left) joins, more specifically: with as many left joins as the maximum depth of the tree, it will be possible in one query. This is the reason a lot of people tend to save the 'depth' of a specific category, so you 'll be able to filter and limit the amount of joins to the same table to a more sane amount.

Personally, for regularly altering data: I tend to configure a trigger on an insert / update, which will save / cache the current 'path' of a node based on id's (for instance: a path is '12/62/28/345', in which every step between the delimiter / is the primary key of a parent node in the correct order (345's parent is 28, 28's parent is 62, etc.)), so I can query it with just one join like this (/ used as separator):

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>;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜