我尝试使用PHP和MySQL从数据库组织一些数据。
我想显示公司位置列表及其各自的子部门,建筑物等。
但我似乎无法正确组织数据,我无法理解应如何做到这一点。
因此,层次结构可能变得非常复杂,有7个不同的级别,每个级别都有很多分支。
我尝试将所有数据集中在一个表中,但我无法将这些区域正确分组。
我需要按照以下方式显示数据:
顶级[北] - (公司区域)
- 第二级[纽卡斯尔] - (区域位置)
- 第3级[End Building] - (loction Building)
---第4级[账户] - (建筑部门)
----第5级[FD办公室] - (部门办公室)
---第4级[管理员] - (建筑部门)
----第5级[OM办公室] - (部门办公室)
- 第二级[Aberdeen] - (地区位置)
- 第3级[绿色建筑] - (位置建设)
---第4级[科学] - (建筑部门)
那么,最好的组织方式是什么,以便我可以将每个级别与其子级别组合在一起?
我的想法是将每个级别放在数据库表中,然后使用另一个表来链接级别及其子级,但我无法理解如何组织它并获取数据。
你能否谈谈最佳方式?
继承我正在尝试的单人桌
答案 0 :(得分:0)
恕我直言,最简单的方法是将所有数据存储在一个表中,并使用“父”字段,引用其父级别的id。 Null是一个根/顶级条目。
这可以这样做:
while(($row = mysqli_fetch_assoc($res)) !== false) {
if ($row['parent_id'] !== null) {
$index[$row['parent_id']][] = $row;
} else {
$topLevel = $row;
}
}
function displayChildren($level_id, $index) {
foreach ($index as $children) {
usort($children, function($a, $b) {
return $a['level'] - $b['level'];
});
foreach ($children as $child) {
if ($child['parent_id'] == $level_id) {
echo str_repeat('-', $child['level']);
echo $child['name'];
echo "<br />";
displayChildren($child['id'], $index);
}
}
}
}
displayChildren($topLevel['id'], $index);
此代码表示同一级别中的随机顺序,以及数据库中的级别字段。调整代码以完美地满足您的需求:)
答案 1 :(得分:0)
尝试使用此创建表 -
CREATE TABLE IF NOT EXISTS `test_table` (
`id` int(11) unsigned NOT NULL,
`name` varchar(55) COLLATE utf8_unicode_ci NOT NULL,
`parent_id` int(11) NOT NULL,
`level` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Dumping data for table `test_table`
--
INSERT INTO `test_table` (`id`, `name`, `parent_id`, `level`) VALUES
(1, 'root1', 0, 0),
(2, 'root2', 0, 0),
(3, 'root1-level1', 1, 1),
(4, 'root1-level2', 1, 2),
(5, 'root2-level2', 2, 1),
(6, 'root2-level3', 2, 2);
创建后,您可以使用自联接
获取数据select t1.name as parent_name, t2.name, t2.level from test_table t1 join test_table t2 on t1.id = t2.parent_id order by t1.id