Нет необходимости в двух таблицах для древовидных структур, стандартная схема древовидной таблицы может быть:
categories
id | catname | description | parent | lineage
Lineage будет содержать путь к корневой категории, например '0,2,5,6' родитель будет содержать 6
Тогда для вашего вопроса вы можете выбрать все из этой таблицы. ПОРЯДОК ПО ДЛИНЕ (lineage) ASC
после того, как у вас есть набор результатов из базы данных, вы индексируете их по их идентификатору
$categories = array();
while($row = mysql_fetch_assoc($result)){
$categories[$row['id']] = $row;
}
теперь, когда вы просматриваете их в html, вы можете проверить, есть ли у текущей категории дочерние категории.
Lineage используется для поиска всех категорий, которые являются потомками определенной категории:
SELECT * FROM categories WHERE lineage REGEXP '[[:<:]]5[[:>:]]'
Это даст любые категории с 5 в их происхождении.