Может как то так поидеи.
function getParents($id, $parents=array())
{
if (empty($id)) {
return $parents
} else {
//тут селект запрос, которые выбирает парент айди с базы по $id
$parents[] = $parent_id;
return getParents($parent_id, $parents);
}
}
ну и потом соответственно
$id = 4;
$parents = getParents($id);
ну а если у тебя извесна масимальная вложеность и она не сильно большая к примеру максимум 3. То тогда можно обойтись грубо говоря одним запросом где нужно 2 раза сделать join таблицы саму на себя:
SELECT t1.id, t2.id, t3.id
FROM sometable as t1
LEFT JOIN somateble as t2 ON t2.id = t1.parent_id
LEFT JOIN somateble as t3 ON t3.id = t2.parent_id
ну и тд.