mysql — получить все млм нижестоящие линии (php)

Я хочу получить все нижние линии отца в двоичном дереве, у каждого отца есть левая и правая руки, каждая рука имеет левую и правую руки и т. Д.
как на следующем изображении.
В моей базе данных у меня есть таблица с именем users, у каждого пользователя есть идентификатор отца и позиция, которая является L или R.

Вот моя функция … но она все еще не получает все нижестоящие.
как на следующем изображении.

0

Решение

Две вещи выделяются для меня:

  1. $i аргумент и использование $this->downline_id_arr,

Рассмотрите возможность:

$children = array();
foreach($data as $row) {
$child_id = $row->id;
$children[$child_id] = array(/**/);
$children = array_merge($children, $this->getAllDownline($child_id);
}
return $childen;

Теперь вам не нужно $i переменная или $this->downline_id_arr,

  1. Вы запрашиваете каждый узел один за другим.

Вместо этого рассмотрите возможность запроса по уровню:

function getAllDownlines($fathers) {
$data = "SELECT * FROM users WHERE father_id IN (/*fathers*/)";
$new_father_ids = array();
$children = array();
foreach ($data as $child) {
$children[$child->id] = array(/**/); // etc

$new_father_ids[] = $child->id;
}
$children = array_merge($children, $this->getAllDownlines($new_father_ids);
return $childen;
}

Обычно меньше запросов выполняется быстрее, поэтому вы должны увидеть лучшую производительность.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector