Kod:
	$cats = get_stuff("SELECT * FROM categories ORDER BY parent_id ASC");
$lowest_level = $cats['0']['parent_id']; // hitta lägsta parent_id
$cat_arr = array();
foreach($cats as $ca){
  $cat_arr['rela'][$ca['parent_id']][] = $ca['id'];
  $cat_arr['data'][$ca['id']] = $ca;
}
echo '<select name="parent">'.traverse_stuff($cat_arr, $lowest_level, 0, 0).'</select>';
function traverse_stuff($cat_arr, $parent, $level, $select_id){
  $output = '';
    foreach($cat_arr['rela'][$parent] as $ca){
      $output .= '<option value="'.$ca.'" '.(($select_id == $ca) ? 'selected="selected"' : '').'>'.str_repeat(' ', $level).'|__'.$cat_arr['data'][$ca]['name'].'</option>';
      if(!isset($cat_arr['rela'][$ca])){continue;} // $ca har inga barn, gå vidare
      $output .= traverse_stuff($cat_arr, $ca, $level+1, $select_id);
    }
  return $output;
}
 Bara ett databasanrop krävs, klarar oändligt med nivåer.