返回信息流现在有一堆层次结构的数据存在数据库的一张表里,在界面上用树来表示.
但是树的节点也有上下的位置关系,如果用户拖动了树节点,使某节点排在另外
一个节点上面,那么如何才能让下次再加载这颗树的时候,这种上下关系依然能够
保存下来呢?
大家有什么好的策略吗?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #24076同步于 2008/1/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
请教一个设计性的问题
Keyman
2008/1/29镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
一个解决办法:主键用GUID,每个节点的记录都保存父节点的GUID
另一个解决办法:用树形编号
如每两位表示一个节点,采用6位3级编码,北京(110000),东城(110100),西城(110200),海淀(110300),北邮(110301),等等
不一定要整个编码用一个字段,可以每一级编码就一个字段
还有其他的办法,这就看你需求了
ls可能理解偏了,这个表是个主键自包含的表,表中有个字段是表示父级节点的,
从表到生成树这个过程比较简单.
问题是生成的树的顺序都是已经固定好的了,如果用户想让某个节点排得靠近根节点
的话,下次加载也能记住当前的顺序的话,那么应该怎么实现?
每次加载的时候不是从数据库里重新读取出数据生成树么?
从主结点一级一级地依次生成子结点不就行了?写个递归,虽然效率上差了点.
【 在 Keyman (KISS) 的大作中提到: 】
: lz可能理解偏了,这个表是个主键自包含的表,表中有个字段是表示父级节点的,
: 从表到生成树这个过程比较简单.
: 问题是生成的树的顺序都是已经固定好的了,如果用户想让某个节点排得靠近根节点
: ...................
【 在 boots 的大作中提到: 】
: 每次加载的时候不是从数据库里重新读取出数据生成树么?
: 从主结点一级一级地依次生成子结点不就行了?写个递归,虽然效率上差了点.
对啊,现在就是这样实现的.
从数据库中读出第一级的节点数据,在点击某节点的时候取出该节点的所有子节点的数据
一般取出来的数据顺序是按照主键,也就是一个自增长的id来排序的,
我现在想在为每个节点记录加一个权值字段,初始值都一样,然后增加一个置顶,置底的功能,
通过将节点的权值设置为最大值或者最小值来调整节点的位置.
后来又想了,如果客户要求对于不同用户保存不同的顺序怎么办?唉,崩溃了...复杂度指数增长呀