Пробую сделать через хранимые процедуры(хотя именно здесь, конечно, можно и без них).
Структура таблицы: id,childs(потомки данной ветви через запятую), name.
Процедура:
mysql_query('
create procedure getBranchData(IN id_ int)
begin
select * from branches where id=id_;
end');
class branch
{
private $childs = array();
private $id,$name;
function __construct($id_) {
$this->id = $id_;
$res = mysql_query('call getBranchData('.$this->id.')');
$arr = mysql_fetch_array($res);
$this->name = $arr['name'];
$chi = explode(",",$arr['childs']);
foreach($chi as $ch)
{
if($ch!=$this->id && !empty($ch))
{
$br = new branch($ch);
$this->childs[] = $br;
}
}
}
}
$el0 = new branch(1);