Если "иерархия" не ограничена - никак.
Ели ограничена, то только криво.
"верх" - (1)
"вниз" - каскадно построить выборки "снизу"(в вт например) по количеству "вложенности"
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший