获取上线的所有传销下线 (php)
get all mlm downlines of an upline (php)
我想在二叉树中获取一个父亲的所有下线,每个父亲有左臂和右臂,每个臂有左臂和右臂等。
like the following image。
在我的数据库中,我有一个名为 users 的 table,每个用户都有一个父亲 ID 和位置,即 L 或 R。
这是我的功能..但它仍然没有得到所有的下线。
like the following image.
有两件事让我印象深刻:
$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
。
- 您正在逐一查询每个节点。
考虑改为按级别查询:
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;
}
通常查询越少速度越快,因此您应该会看到更好的性能。
我想在二叉树中获取一个父亲的所有下线,每个父亲有左臂和右臂,每个臂有左臂和右臂等。 like the following image。 在我的数据库中,我有一个名为 users 的 table,每个用户都有一个父亲 ID 和位置,即 L 或 R。
这是我的功能..但它仍然没有得到所有的下线。 like the following image.
有两件事让我印象深刻:
$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
。
- 您正在逐一查询每个节点。
考虑改为按级别查询:
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;
}
通常查询越少速度越快,因此您应该会看到更好的性能。