leni_m
@leni_m
ЧупаКобрус

Как написать рекурсивный запрос к базе?

Есть таблица с полями id и parent_id.
parent_id у каких-то строк пустой(т.е. первый уровень), а у каких-то туда вписан id одной из строк, что создает вложенность одних строк в другие.
Думаю написать
function getParents($id) // Сюда попадает id строки
{
... // А тут я хотел бы получить всех родителей до самого первого
}

Только вот не знаю как написать, мб подскажет кто простой примерчик или направление?
  • Вопрос задан
  • 233 просмотра
Решения вопроса 1
@MrTimon
Может как то так поидеи.
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


ну и тд.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@heahoh
Full stackoverflow developer
Возможно вместо использования parent_id вам больше подойдет nested sets, статья на хабре
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы