$result = mysql_query("SELECT 'id', 'pid', 'name', 'desc', 'pay' FROM 'lists'"); $lists = array(); //тут будет массив while($list = mysql_fetch_assoc($result)) // в цикле формируем массив $lists[$list['pid']][] = $list; //далее наша главная рекурсивная функция, которая сформирует дерево function create_tree($lists, $pid){ if(is_array($lists) && isset($lists[$pid])){ $tree = ''; } else return null; return $tree; } // вызываем функцию и строим дерево echo create_tree($lists, 0);