我有一张名为Taxonomy
它的表,其中包含与组织结构有关的所有内容。作为学校示例表的样子
id | name | type | parent
1 | 2014 | year | null
2 | igcse| dep | 1
3 | kg1 | grade| 2
4 | c1 | class| 3
4 种类型,以学年(2014-2015)为例。在它的学校部门下,在它的多个班级下(等级1、2、3等)。
当我需要得到这个时,我运行一个像这样的自连接查询:
SELECT y.name AS year,
d.name AS dep,
g.name AS grade,
c.name AS class,
e.name AS exam
FROM `taxonomys` e
left JOIN `taxonomys` c on c.id = e.parent
left JOIN `taxonomys` g on g.id = c.parent
left JOIN `taxonomys` d on d.id = g.parent
left JOIN `taxonomys` y on y.id = d.parent
where c.type in ('grade','department','class','year')
它工作正常,除了我得到这么多空值!查询结果示例
如您所见,课程在 year under year 字段中正确显示,
然而在第一行,年份在 Class 字段下(移动了 3 个单元格)。
每当有一个空值时,就会移动。我该如何解决?
多谢
编辑
What is this table ?
邻接列表模型的一种变体,我添加了一个名为的额外列type
,以便我可以识别任何行的级别,而无需检索整个路径。
表包含学校的结构。例子
在每个新的一年里,他们创造了一个一年的例子“2014-2015”,然后在这一年里创造了学校不同的部门“美国文凭、高中、幼儿园等。”下面是学校的成绩,每个年级都有班级..
例子
id name type parent
1 2014-2015 year null
2 highschool dep. 1
3 grade 10 grade 2
4 grade 11 grade 2
5 class a class 3
6 class b class 3
这些输入意味着
2014-2015
|__Highschool
|__ grade 10
|__ class a
|__ class b
|__ grade 11
之后,另一个表将学生链接到班级节点,另一个表将帖子链接到班级等等。
所以这张表基本上包含学校结构。由于年份、部门和年级仅用于组织学校用户“除了他们需要的姓名之外没有其他数据”我决定将所有数据放在一张表中。
Why did you build it in this a very very very bad/anti-pattern design ?
它实际上对我来说非常好!(我们与所有部门、学生和班级合作了 4 年,超过 10 万个帖子链接到用户/班级和超过 1 万个用户,到目前为止工作顺利!)