Şurada bir yanlış anlaşılma var sanırım. Tek SQL Sorgusu diye yazmışsınız başlıkta ama o fonksiyonda zaten sql sorgusu defalarca tekrarlıyor kendini. Ayrıca sınırsız kategorilerde hiyerarşik kategorileme mantığı kullanırsanız daha detaylı ve kullanımı rahat bir yapı da elde edebilirsiniz.

http://www.sitepoint.com/hierarchical-data-database/