I have a table for posts as (id, category_id, ...), then JOIN
it with the category table as (category_id, category_name, parent, ...) ON category_id
If you're willing to limit the depth, you can use UNION
to stack up JOIN
s to get what you want. Here's a 3-level deep implementation:
select * from posts
where category_id = ?
union
select * from posts p
join category c on c.category_id = p.category_id
where c.parent = ?
union
select * from posts p
join category c1 on c1.category_id = p.category_id
join category c2 on c2.category_id = c1.parent
where c2.parent = ?
You would pass the same variable in (for the category you're interested in) for all 3 placeholders.