Niby ma się wydawac proste, ale tak nie jest mam takie pytanie jak posortować działy według takiego kryteirum

Np mamy takie działy na forum

forum główne
programownie
php
java
perl
c++
systemy operacyjne
linux
debian
mandriva
bsd

I chodzi o to, że to są działy które zawierają n liczbę poddziałów które poddziały mogą zawierać też poddziały i ja chcę posortować je w taki sposó” jak je pokazałem z tą listą i chcę też do wydruku dać tabulatory

mam to w taki sposób w bazie
Tabela senctions

nazwa
id_sections
nr
 	
	3 	nr 	int(11) 			Nie 	Brak 			Zmień Zmień 	Usuń Usuń 	



	4 	id_sections 	int(11) 	

I tera tutaj nr odpowiada za to na jakim pozycji jest np jak jest nr 1 to nie ma nadrzędnej pozycji

Ja juz tutaj coś kombinowałem, ale coś mi nie wychodzi nie wiem może podgrypibony jakiś jestem.

    public function selectSections() {
        $Section = new AppSection;
        $arraySection = $Section->groupBy("nr")->orderBy("nr","DESC")->orderBy("id")->get();
        $arraySection3 = [];
        $i = 0;
        foreach ($arraySection as $arraySection2) {
            if ($arraySection2->nr == 1) {
                $arraySection4 = $Section->where("id_sections",$arraySection2->id)->orderBy("nr","DESC")->orderBy("id")->get();
            }
            else {
                
                $arraySection4 = $Section->where("id_sections",0)->orderBy("nr","DESC")->orderBy("id")->get();
            }
            foreach ($arraySection4 as $arraySection5) {
                print "while<br>";
                $arraySection3[$i]["name"] = $arraySection5->name;
                $arraySection3[$i]["id"] = $arraySection5->id;
                $i++;
            }
            //print "while<br>";
        }
        return $arraySection3;
        /*
        
        foreach ($arraySection as $arraySection2) {
            //$j = 1;
            $tab = "";
            for ($j = 1;$j <= $arraySection2->nr;$j++) {
                $tab .= " ";
            }
        }
         * 
         */
    }