yes, 20 joins is possible in one query, it will be a large query but it is certainly feasible
it should also perform extremely well, since you're going up the tree rather than down, because it will only find 1 result row, not millions as it might going down the tree (see this thread)
Code:
select curr.title
, up01.title
, up02.title
, up03.title
, up04.title
, up05.title
, up06.title
, up07.title
, up08.title
, up09.title
, up10.title
, up11.title
, up12.title
, up13.title
, up14.title
, up15.title
, up16.title
, up17.title
, up18.title
, up19.title
, up20.title
from sections as curr
left outer
join sections as up01
on curr.parent_id = up01.id
left outer
join sections as up02
on up01.parent_id = up02.id
left outer
join sections as up03
on up02.parent_id = up03.id
left outer
join sections as up04
on up03.parent_id = up04.id
left outer
join sections as up05
on up04.parent_id = up05.id
left outer
join sections as up06
on up05.parent_id = up06.id
left outer
join sections as up07
on up06.parent_id = up07.id
left outer
join sections as up08
on up07.parent_id = up08.id
left outer
join sections as up09
on up08.parent_id = up09.id
left outer
join sections as up10
on up09.parent_id = up10.id
left outer
join sections as up11
on up10.parent_id = up11.id
left outer
join sections as up12
on up11.parent_id = up12.id
left outer
join sections as up13
on up12.parent_id = up13.id
left outer
join sections as up14
on up13.parent_id = up14.id
left outer
join sections as up15
on up14.parent_id = up15.id
left outer
join sections as up16
on up15.parent_id = up16.id
left outer
join sections as up17
on up16.parent_id = up17.id
left outer
join sections as up18
on up17.parent_id = up18.id
left outer
join sections as up19
on up18.parent_id = up19.id
left outer
join sections as up20
on up19.parent_id = up20.id
note they have to be left outer joins because you could be sitting on, say, a node 4 levels down, then many of the resulting columns will be null
you just assemble the breadcrumb by reading the titles from right to left in the result set, starting with the first non-null one (which will be the root)
Bookmarks