У меня есть решение для этого,
Если у вас есть древовидная структура в 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) - это функция, которая принимает идентификатор и выдает всех детей и внуков за этот идентификатор.
Аналогично get_parents ($ id, $ mysqli) дает вамвсе родители, бабушки и дедушки для определенного идентификатора.
$ mysqli является объектом подключения mysqli.
Примечание: - В этом фрагменте кода используется рекурсия.