Как выгрузить список разделов неограниченной вложенности из бд?

Есть такая таблица, где поле, которое имеет пустой parent_id является корневым. Поля, которые имеют parent_id = id.родительского раздела попадают в в этот родительский раздел и вложенность может быть бесконечной. Нужно выводить разделы как на 2 скриншоте (взял с яндекс почты).

Не понимаю даже за что браться, поэтому и решил обратиться за помощью, заранее спасибо!

БД

Необходимо вывести данные как здесь:

Результат


Ответы (1 шт):

Автор решения: Сергей Махнёв

На правильный ответ не претендую, не хватает данных для тестирования. Но раз ваш список неограниченой вложености, то можно попробовать реализовать через рекурсию. Примерно, это будет выглядить так:

function rec($array = array()) {
    foreach ($array as $value) {
        $query = "SELECT parent_id as id FROM table where id = {$value['id']}";
        $res = $conn->Execute($query);
        while ($data = $res->FetchRow()) {
            $result[] = $data;
        }
        if (is_array($result)) {
            return $result[] = rec($result);
        } else {
            return;
        }
    }
}

$query = "SELECT id FROM table where parent_id IS NULL";
$res = $conn->Execute($query);
while ($data = $res->FetchRow()) {
    $result[] = $data;
}
print_r(rec($result));

Оставлю ответ в общем, может кто поправит в случае ошибок с моей стороны.

→ Ссылка