[asp.net+Sql]关于树的排序

在大部分的大型程序里都会用到树,种树这个鸟活让我头大了几天。
树的算法大家应该都很清楚了,递归就可以了,但是头疼的就是树的排序,在添加、修改父节点,节点移动都要重新计算树的排序,从而是代码量大大提高。于是决定用SQL去做这个烦琐的事情,用了2个触发器,一个存储过程完成了树的排序。

Code

 

树的递归排序

Code

第一个触发器实现添加节点的时候,对排序进行计算根据插入的父节点的ID,来判断该节点下最大的排序值是多少,如果该节点下没有子节点,返回0,那么排序也就是0+1,排序在第一位,如果有节点,根据该父节点下子节点最大的排序值+1,来确定新添加的记录的排序值

Code

 

第二个触发器在更改父节点的ID的时候触发,比如,我把根节点的子节点1下的子节点1-1
移动只至根节点下的子节点2,那么这时候排序值仍然需要重新计算,计算方法同上个触发器,移动过去后,该节点会位于新的父节点的尾部。

Code

存储过程是为了在子节点在父节点下上下移动时候使用,
传入值两个@ModID int------节点编号
@Menth nvarchar(5)-------移动方式up或者down
返回值@result,用来输出是否移动成功
实现原理是将移动节点的父节点按顺序排列,如果上移动,找到该移动节点,与上条记录的排序值互换,下移则相反!

这样操作起来在程序的代码中可以不必考虑节点排序的问题,一切让SQL自己做

posted @ 2009-05-24 09:52  doing_zzh  阅读(215)  评论(0编辑  收藏  举报