Допустим, вы хотите сделать это в PHP с использованием этой таблицы, например, ради, я буду использовать массив для представления возвращаемых данных базы данных после JOIN
между данной таблицей и тем, что я представляю, как ID-> Name таблица сопоставления:
$links = array(
array('A' => 1, 'AName' => 'TestPC1', 'B' => 2, 'BName' => 'TestHub2'),
array('A' => 2, 'AName' => 'TestHub2', 'B' => 3, 'BName' => 'Rack3'),
array('A' => 2, 'AName' => 'TestHub2', 'B' => 4, 'BName' => 'Rack4')
);
$elements = array();
// Build the tree
foreach ($links as $link) {
if (!isset($elements[$link['A']])) {
$elements[$link['A']] = array(
'id' => $link['A'], 'name' => $link['AName'],
'data' => array(), 'children' => array()
);
}
if (!isset($elements[$link['B']])) {
$elements[$link['B']] = array(
'id' => $link['B'], 'name' => $link['BName'],
'data' => array(), 'children' => array()
);
}
$elements[$link['A']]['children'][$link['B']] = &$elements[$link['B']];
}
// Patch up the indices to start from 0
foreach ($elements as &$element) {
$element['children'] = array_values($element['children']);
}
$elements = array_values($elements);
Лично я бы не стал исправлять индексы, это облегчит поиск записей по идентификатору позже, если вы этого не сделаете.
Будьте внимательны при вводе данных о родителях / детях, иначе вы получите прекрасную круговую ссылку.
Вам, конечно, нужно заменить ссылки на $links
подходящей командой db, которая создает массив (mysql_fetch_array и т. Д.).