Да так все просто, но вот чтобы построить такое дерево, нужно выполнить кучу запросов. Если не брать в расчет что по такой структуре, скажем oracle строит дерево автоматически, но я думаю, что тоже используется куча запросов, только на сервере.
Можно конечно получить все данные и обработать скриптом, но все равно при большом количестве - это долго.
Гораздо быстрее в плане вывода результата можно сделать используя
Nested Set. Да придется повозиться с добавлением, удалением и темболее с перемещением, зато выборка будет идти намного быстрее, чем в твоем варианте.
Извиняюсь, не дочитал до конца, если не надо выводить все дерево одновременно, то твой вариант будет более оптимальным.