Tam anlamadım ama recursive function kullanarak sınrısız limite ulasabilirsin.

function get_sub_category($id) {


$q = mysql_query("SELECT cat_name,cat_id FROM categories WHERE home='{$id}'");

if (mysql_num_rows($q) > 0) {
echo '<blockquote>';

  while ($a = mysql_fetch_array($q)) {
  echo $a['cat_name'].'<br />';
  get_sub_category($a['cat_id']);
  }

echo '</blockquote>';
}

}
gibi.