树结构的关系存储问题

bala7229291 2011-05-30 02:29:44
最近在做一个网站的时候,经常要用到树这种结构,我原先只会用ID,ParentID这种模式,可是跟我配合的程序员老是觉得别扭,所以想问问各位实现树这种结构的关系模式,越多越好,最好能有点评和用法之类的更好
...全文
79 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bala7229291 2011-09-04
  • 打赏
  • 举报
回复
没有满意的答案
bala7229291 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]
SQL code
2005以上可以使用cte来递归了 效率还可以

;with f as
(
select * from tb where id=@id
union all
select a.* from tb a join f b on a.id=b.ParentID
)
select * from f
[/Quote]
我明白你的意思了,你这个是把树遍历出来,虽然你省略了树的深度控制的语句。

不过实现的时候我遇到的问题是,往往程序遍历树的方法和我们这种遍历的方法不一致,这样当把数据绑定到树上的时候就会出现些莫名其妙的问题。

比如:我们的这种遍历方式就是先确定一个顶点(根),然后按照第一层,第二层这样遍历出来,
对于这样的一棵树
root
|
/ \
1 2
/ \ / \
3 4 5 6
我们的遍历应该是 root->1->2->3->4->5->6
而程序往往要的是: root->1->3->4->2->5->6

在特别的时候,我本来只想显示 5 6但却要保持原有的树的结构,即需要 root->2->5->6

我是想问,对于ID,ParentID这种结构,有没有实现一些常见树结构的例子。
ringobob 2011-05-30
  • 打赏
  • 举报
回复
类似代码表or数据字典?

ID CODE SUBCODE DESCR
001 001 001 第1-1-1条
001 001 002 第1-1-2条
001 001 003 第1-1-3条
001 001 004 第1-1-4条
001 002 001 第1-2-1条
001 002 002 第1-2-2条
002 001 001 第2-1-1条
002 002 001 第2-2-1条
--小F-- 2011-05-30
  • 打赏
  • 举报
回复
2005以上可以使用cte来递归了 效率还可以

;with f as
(
select * from tb where id=@id
union all
select a.* from tb a join f b on a.id=b.ParentID
)
select * from f
快溜 2011-05-30
  • 打赏
  • 举报
回复
可存入上下级关系为一个字段例如treelevel字段,上级01,下级01001,下级01002,不用使用递归。提高查询效率。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧