9级的树,如何建一张合理的数据表

时间:2021-07-31 14:46:57
有两张表
表1:字段1,字段2,字段3,字段4,字段5,字段6,字段7,字段8,字段9
表2:未建立

功能
1.可增加同级节点,下级节点,最高只加到第9级节点
2.增加内容:节点名称。第9级除了节点名称,还提供数量的输入。
3.每个节点都有个数量统计,统计各各节点所包含的子节点的数量总和。
例如:第9级有两个节点,分别为:张三,李四。张三做了10个任务,李四做了1个任务。
      第8级有两个节点,分别为:王五,陈三。王五是张三,李四的父节点,那么王五的数量则为11.陈三因为没有子节点或所包含的子节点的任务之和为0,所以它的数量为0.以此类推……
最终显示结果为:
               -节点1 <10>
             - -节点11 <5>
             - - -节点111 <0>
             - - -节点112 <5>
             - - - -节点1121 <5>
             - - - - -节点11211 <5>
             - - - - - -节点112111 <5>
             - - - - - - -节点1121111 <5>
             - - - - - - - -节点11211111 <5>
             - - - - - - - - -节点112111111 <5>
             - -节点12 <3>
             - - -节点121 <3>
             - - - -节点1211 <3>
             - - - - -节点12111 <3>
             - - - - - -节点121111 <3>
             - - - - - - -节点1211111 <3>
             - - - - - - - -节点12111111 <3>
             - - - - - - - - -节点121111111 <2>
             - - - - - - - - -节点121111112 <1>
             - - -节点122 <2>
             - - - -节点1221 <2>
             - - - - -节点12211 <2>
             - - - - - -节点122111 <2>
             - - - - - - -节点1221111 <2>
             - - - - - - - -节点12211111 <2>
             - - - - - - - - -节点122111111 <2>
树的第一级的节点对应表1的字段1,第二级的节点对应表1的字段2,以此类推……
4.统计
select count(*) from 表1 Where 字段1='' and 字段2='' and 字段3=''
select sum(数量) from 表2 where 字段1='' and 字段2='' and 字段3=''
说明:因为树的第一级的节点对应表1的字段1,因此,两个语句用同一个条件

我自己做的方法

表2:ID 编号 名称 数量
利用编号进行判断主从关系。例如第一级别编号100,那么第二级编号为100100,第三级编号则为100100100,第三级的第2个节点编号则为100100101,以此类推……
树是被我用笨办法做出来了,可是到统计的时候发现对不上了,无法用同一条件语句进行统计。

11 个解决方案

#1


忘了一个功能:复制。
就是点选复制第一级别的,那么便复制所有那一级别的记录,如果点选第2级别的,那么便复制这一级别下所属的所有记录。以此类推……

#2


增加一个级别深度的字段来处理。

#3


引用 2 楼 CloneCenter 的回复:
增加一个级别深度的字段来处理。


这样有个问题,比如:同样是级别深度是2的,那怎么判断它们各自所属的是那个级别深度1里的子节点呢?

#4


ID,名称,父ID,深度depth,备注
通过深度表示几级

#5


id name
id pid name dep
id pid name dep
id pid name dep
.
.
.
.
.
.
pid是上一级的id

#6


学习。。
ps:用xml呢?

#7


我博客里面有个这样的树,不过是vb.net,而且没有写复制的功能!不过复制的功能很简单,你只要把*节点的父节点改下就可以了!
参考:
http://blog.csdn.net/chuxue1342/archive/2007/07/24/1704995.aspx

#8


大家都只想着树,但没考虑最终目的。
最终目的是要统计出两个数量,一个是表1中符合某查询条件的记录数,一个是表2中符合该查询条件的数量。
例如表1字段分别为:年度    季节    月份    学校     系别     专业     班级     性别     负责人
有记录:           09年    春季    04月   学校1    软件     WEB     2       男       张三
                   09年    春季    04月   学校1    软件     WEB     2       男       张三
                   09年    春季    04月   学校1    软件     WEB     2       女       张三
查询条件:年度=09年   季节=春季    月份=04月   学校=学校1    系别=软件     专业=WEB     班级=2       性别=男      负责人=张三

在表2中,第一级节点其中一个节点为:09年    第二级节点有一个节点为:春季   …… 第九级节点有个节点为张三,他做了3件事情

统计:满足查询条件的,在表1中有count(*)为2,在表2中sum(数量)则为3

目的就是为了查询两表中符合某同个查询条件的各自数量。

#9


绑定树在上一篇!你也可以看下!

#10


表1的数据结构已经定下来,不能更改的了
我们做查询不是要where 字段名='' and 字段名='' 吗?
那么要利用同一个查询条件,表2里是不是也必须要有跟表1一样的字段呢?
不然,查询表2时,不就会出现对象名无效吗?

#11


一个表就可以搞定了嘛

ID PARENETID NAME LEVEL

这个结构可以满足需求了.

#1


忘了一个功能:复制。
就是点选复制第一级别的,那么便复制所有那一级别的记录,如果点选第2级别的,那么便复制这一级别下所属的所有记录。以此类推……

#2


增加一个级别深度的字段来处理。

#3


引用 2 楼 CloneCenter 的回复:
增加一个级别深度的字段来处理。


这样有个问题,比如:同样是级别深度是2的,那怎么判断它们各自所属的是那个级别深度1里的子节点呢?

#4


ID,名称,父ID,深度depth,备注
通过深度表示几级

#5


id name
id pid name dep
id pid name dep
id pid name dep
.
.
.
.
.
.
pid是上一级的id

#6


学习。。
ps:用xml呢?

#7


我博客里面有个这样的树,不过是vb.net,而且没有写复制的功能!不过复制的功能很简单,你只要把*节点的父节点改下就可以了!
参考:
http://blog.csdn.net/chuxue1342/archive/2007/07/24/1704995.aspx

#8


大家都只想着树,但没考虑最终目的。
最终目的是要统计出两个数量,一个是表1中符合某查询条件的记录数,一个是表2中符合该查询条件的数量。
例如表1字段分别为:年度    季节    月份    学校     系别     专业     班级     性别     负责人
有记录:           09年    春季    04月   学校1    软件     WEB     2       男       张三
                   09年    春季    04月   学校1    软件     WEB     2       男       张三
                   09年    春季    04月   学校1    软件     WEB     2       女       张三
查询条件:年度=09年   季节=春季    月份=04月   学校=学校1    系别=软件     专业=WEB     班级=2       性别=男      负责人=张三

在表2中,第一级节点其中一个节点为:09年    第二级节点有一个节点为:春季   …… 第九级节点有个节点为张三,他做了3件事情

统计:满足查询条件的,在表1中有count(*)为2,在表2中sum(数量)则为3

目的就是为了查询两表中符合某同个查询条件的各自数量。

#9


绑定树在上一篇!你也可以看下!

#10


表1的数据结构已经定下来,不能更改的了
我们做查询不是要where 字段名='' and 字段名='' 吗?
那么要利用同一个查询条件,表2里是不是也必须要有跟表1一样的字段呢?
不然,查询表2时,不就会出现对象名无效吗?

#11


一个表就可以搞定了嘛

ID PARENETID NAME LEVEL

这个结构可以满足需求了.