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

Ребят, в общем столкнулся с такой проблемой.
Пишу рекурсию. Суть такова:
Есть реферальная программа. И функция определяет вышестоящего реферера. Она должна его определить так, чтобы под каждым пользователем было не больше двух(к примеру) рефералов.
То есть если под пользователем есть два реферала, то он начинает чекать этих двух. Если под этими двумя тоже заполнено, то функция чекает следующую линию уже из четырех.
У меня на данный момент такая ситуация. Но она работает неверно. На рисунке указал что именно.
123-png.1135
То есть функция начинает свой обход "вглубь" до самого нижнего реферала, а мне нужно чтобы она чекала линии поочередно.
Вот как выводится эта строка:
echo $referal_num."---".$change_curator['id']." ".$change_curator['parent']."<br>";

upd-png.1136
Он переходит в пользователю с id 2042 на пятой итерации, а нужно чтобы вызывал 2049.
Как тут правильнее сделать. Заранее премного благодарен.
////////////////////////************//////////////////////////////
function overflow_in($parent_link) {
    global $CONNECT;
    $curator = mysqli_query($CONNECT, "SELECT * FROM `users` WHERE `parent` = '$parent_link[id]'");
    while ($change_curator = mysqli_fetch_assoc($curator) ) {
        $referal_num = mysqli_num_rows(mysqli_query($CONNECT, "SELECT * FROM `users` WHERE `parent` = '$change_curator[id]'"));
        echo $referal_num."---".$change_curator['id']." ".$change_curator['parent']."<br>";

        if ( $referal_num < 2 ) {
            return $change_curator['id'];
        }
    }
    $curator_next[$i] = mysqli_query($CONNECT, "SELECT * FROM `users` WHERE `parent` = '$parent_link[id]'");
    $change_curator_next = mysqli_fetch_assoc($curator_next[$i]);
    return overflow_in($change_curator_next);
}

function overflow($parent_cook) {
  global $CONNECT;
  $parent_link = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT * FROM `users` WHERE `id` = $parent_cook"));

    $referal_num = mysqli_num_rows(mysqli_query($CONNECT, "SELECT * FROM `users` WHERE `parent` = '$parent_link[id]'"));

    if ( $referal_num < 2 )
        return $parent_cook;
    else
        return overflow_in($parent_link);
}
////////////////////////************//////////////////////////////
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Поменять структуру хранения на Nested Set. Тогда можно будет выбрать нужную запись одним запросом к БД.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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