如何使用PHP

时间:2016-05-18 09:41:45

标签: php mysql sql-server

我尝试使用PHP和MySQL从数据库组织一些数据。

我想显示公司位置列表及其各自的子部门,建筑物等。

但我似乎无法正确组织数据,我无法理解应如何做到这一点。

因此,层次结构可能变得非常复杂,有7个不同的级别,每个级别都有很多分支。

我尝试将所有数据集中在一个表中,但我无法将这些区域正确分组。

我需要按照以下方式显示数据:

顶级[北] - (公司区域)

- 第二级[纽卡斯尔] - (区域位置)

- 第3级[End Building] - (loction Building)

---第4级[账户] - (建筑部门)

----第5级[FD办公室] - (部门办公室)

---第4级[管理员] - (建筑部门)

----第5级[OM办公室] - (部门办公室)

- 第二级[Aberdeen] - (地区位置)

- 第3级[绿色建筑] - (位置建设)

---第4级[科学] - (建筑部门)

那么,最好的组织方式是什么,以便我可以将每个级别与其子级别组合在一起?

我的想法是将每个级别放在数据库表中,然后使用另一个表来链接级别及其子级,但我无法理解如何组织它并获取数据。

你能否谈谈最佳方式?

继承我正在尝试的单人桌

enter image description here

2 个答案:

答案 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