Почему вставка бесконечная, она ведь равна количеству разделов в таблице.
Казалась бы простая задача.
Для мускуля дерево - задача не такая уж простая (ИМХО).
Первое что приходит в голову - примерно так:
1.Формируешь SQL-запрос так, что бы сразу у тебя все эаписи были в необходимом порядке. (ID и ParentID для этого недостаточно ИМХО).
2. Собираешь в массив строки, к которым может быть присоединена текущая строка (его постоянно прийдется менять).
К примеру перед обработкой строки N6 твоего примера ("Без глаз") в массиве должны быть три строки (Рыбы | Глубоководные | В полушубке ) а после ее обработки в массиве уже должно быть (Рыбы | Глубоководные | без глаз )
Короче, если ты ничего не понял и если никто ничего более понятного не предложит - пиши, буду разжевывать (а то сам понимаю, а популярно объяснить - проблема)
.