gpt4 book ai didi

php - 如何在 PHP MySQL 中查找任何节点的子节点?

转载 作者:行者123 更新时间:2023-11-29 03:16:36 24 4
gpt4 key购买 nike

我有一个 MLM 二叉树,我想找到该用户的所有父项和子项。我该怎么做?

例如:

            A
B C
D E F G

基本上,我无法创建两个 PHP MySQL 函数,其中一个将返回所有 child ,另一个将追溯所有 parent 和祖 parent 。

我的表结构是:

id | my_referral_id | referral_id

my_referral_id = 我的推荐 ID;referral_id = parent 的推荐 ID

最佳答案

我有一个解决方案,

如果你在 mysql 中有一个像下面这样的树结构,

id    |    parent_id
--------------------
1 | 0
2 | 1
3 | 1
4 | 1
5 | 2
6 | 3
7 | 4

然后你可以这样查询这个表结构,

$mysqli = mysqli_connect("127.0.0.1", "dbuser", "dbpass", "dbname");

/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}

function get_children($id = 0, $mysqli) {
$ch = [];
if($id==0){
print_r($ch);
return;
}
$children = get_children_loop($id, $ch, $mysqli);
sort($children);
return $children;
}

function get_children_loop($id, &$ch, $mysqli) {
$query = 'select * from mlm where parent_id = ' . $id;
$result = mysqli_query($mysqli, $query);
if ($result->num_rows) {
while($row = $result->fetch_array(MYSQLI_ASSOC)){
$ch[] = $row['id'];
get_children_loop($row['id'], $ch, $mysqli);
}
}
return $ch;
}

function get_parents($id = 0, $mysqli) {

$p = [];
$parents = get_parents_loop($id, $p, $mysqli);
sort($parents);
return $parents;
}

function get_parents_loop($id, &$p, $mysqli) {
$query = 'select * from mlm where id = ' . $id;
$result = mysqli_query($mysqli, $query);
if ($result->num_rows) {
while($row = $result->fetch_array(MYSQLI_ASSOC)){
if ($row['parent_id']!= 0)
$p[] = $row['parent_id'];
get_parents_loop($row['parent_id'], $p, $mysqli);
}
}
return $p;
}

$children = get_children(1, $mysqli);
print_r($children);
$parents = get_parents(6, $mysqli);
print_r($parents);

get_children($id,$mysqli) 是一个函数,它接受一个 id 并为您提供该 id 的所有子孙。

同样,get_parents($id,$mysqli) 为您提供特定 ID 的所有 parent 和祖 parent 。

$mysqli 是 mysqli 连接对象。

注意:- 此代码片段使用递归。

关于php - 如何在 PHP MySQL 中查找任何节点的子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55155085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com