当前位置:首页 > 芯闻号 > 充电吧
[导读]1、既然要谈到sql,数据库表是必须的 2、数据结构   3、获取某个节点的所有子节点    传统的写法(sql2000) 很麻烦,暂且就不写了    来看看CTE的写法CREATE PROC sp_

1、既然要谈到sql,数据库表是必须的

 

2、数据结构

   

3、获取某个节点的所有子节点

    传统的写法(sql2000) 很麻烦,暂且就不写了

    来看看CTE的写法


CREATE PROC sp_getTreeById(@TreeId int) AS 
BEGIN 
	WITH cteTree AS
	  (SELECT *
	   FROM TuziTree
	   WHERE Id = @TreeId --第一个查询作为递归的基点(锚点)
		 UNION ALL
		 SELECT TuziTree.* --第二个查询作为递归成员, 下属成员的结果为空时,此递归结束。
		 FROM cteTree
		 INNER JOIN TuziTree ON cteTree.Id = TuziTree.ParentId
	  ) SELECT * FROM cteTree 
END

试一下啊  


 exec  sp_getTreeById  @TreeId=1001                          

结果

-----------------------------------------------

4、使用节点路径来做(每个节点路径都保存自身的路径和所有父节点的路径=自己和所有父节点的关联)

   

5、既然有个路径

  那么查询其所有子节点 只需要 where nodePath like '/1001/%'了

  这样就会简单很多,加上索引。

总结:

  如果在性能的需要上,我们可以采用按需加载,点击节点时候 才会加载其所有子节点。

  如果在变化不大的情况下,可以采用缓存 。这样的处理 可以满足很多业务需求。

  良好的表设计会给后期的开发以及需求变化 带来更多的便利。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭