Jednym z założeń uczelnianego projektu jest stworzenie hierarchicznej struktury kategorii (czyli po ludzku mówiąc drzewa

Mam z tym jednak kilka problemów.
Najpierw struktura tabeli:
CREATE TABLE `categories` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) collate utf8_unicode_ci NOT NULL, `parent` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; INSERT INTO `categories` (`id`, `name`, `parent`) VALUES (0, 'root', 0);
Insert dodaje korzeń drzewa, tak żeby user przypadkowo nie zdefiniował wielu korzeni (root jest rodzicem dla wszystkich kategorii głównych).
Teraz problemy.
- wszytko wyświetlane jako listy.
Na stronie głównej w menu wyświetlam kategorie główne jako linki (np. tak jak w allegro.pl). Jest to proste.
SELECT * FROM categories WHERE parent=0
Po kliknięciu w kategorię chciałbym, aby wyświetliły się jej dzieci, ale tylko poziom 1. Link oczywiście można zbudować tak
ale nie wiem jak to wyświetlić z widocznym rozróżnieniem na rodziców i potomków.
Dodatkowo przy kategorii chciałbym wyświetlić w nawiasach ile elementów zawiera kategoria i wszyscy jej potomkowie.
Mam rozwiązanie w rekurencji jednak przy dużym drzewie kategorii (raczej takie w projekcie nie powstanie ale lepiej się zabezpieczyć) gigantycznie rośnie liczba zapytań do bazy.
Jeśli nie da się jakoś ładnie zaprezentować takiego wyświetlania danych to proszę o jakieś nakierowania na inne sposoby.
Druga sprawa to dodawanie kategorii. Wiadomo, że każda kategoria musi mieć rodzica. Zrobiłem to jako pole <select> z opcjami jako rodzicem. Jednak zupełnie nie widać kto jest kogo rodzicem, kategorie wyglądają na równe sobie. Nie wiem jak to rozwiązać.
Ogólnie z mini-sondażu na uczelni wynika, że rozsądnym rozwiązaniem jest ograniczenie poziomów drzewa np do 4 poziomów. Co myślicie o takim rozwiązaniu?
PS. Nested sets w bazach danych nie wchodzi w tej chwili w grę - za słabo znam SQL i nie mam zbyt wiele czasu na zagłebienie się w niego.