sql查询.依据父节点返回合适的数据集-需要扩展
sql查询..根据父节点返回合适的数据集--需要扩展


昨天发过了一贴,具体要实现的东西
:
1.ParentID是只这个选项的父节点...如果父节点没有,则为0(即顶点)。
2.如果该TID所在的行是二级节点,那么Tname前面补两行(--),三级节点补四行。四级节点补六行。以此类推,上图数据只有三个节点.(实际可能不止)
3.如果父节点有子节点,那么子节点要紧跟在父节点之后,如上图 乐器紧接着就是琴笛,而不能乐器后面跟书画类
4.上面的数据是我为了方便说明自己随便写的,所以上面数据库的数据顺序就跟dropdownlist是一致的,甚至连排序都不用,这个是巧合。(实际的时候要按TID升序排序)
这个是昨天的提问,
现在我想添加两个功能。
功能一: 图1的时候,有一个TopID,就是只最顶层的ID,
例如GTID=8的 父级是0,那么证明他说最顶了,所以他的顶层TopID就是他本身
但是GTID=13的 父级是10,但是10的父级是8,8的顶层是0(最顶),所以GTID=13的TOPID=8
这个功能是每插入一条新的信息的时候,需要更新一个TopID,这个怎么连接,
功能二,昨天说的是 返回一张表 包含 GTID,GTName的表,现在要加多一个字段。isDeep
这个字段标示当前的GTID是不是最底层的GTID,如果是,则isDeep=1 否则为0
比如:
GTID=8的时候,他下面还有9,10,他肯定不是最底的,所以 isDeep=0
GTID=13的时候,他就是第三级的了,也是最底的了 所以isDeep=1
昨天有大神答了,但是我现在还在琢磨,看得不是很懂...
这是昨天的代码
------解决思路----------------------
直接加个层级吧,1表示一层,2表示二层,类推
因此,你判断是不是等于1就是顶级了
昨天发过了一贴,具体要实现的东西
:
1.ParentID是只这个选项的父节点...如果父节点没有,则为0(即顶点)。
2.如果该TID所在的行是二级节点,那么Tname前面补两行(--),三级节点补四行。四级节点补六行。以此类推,上图数据只有三个节点.(实际可能不止)
3.如果父节点有子节点,那么子节点要紧跟在父节点之后,如上图 乐器紧接着就是琴笛,而不能乐器后面跟书画类
4.上面的数据是我为了方便说明自己随便写的,所以上面数据库的数据顺序就跟dropdownlist是一致的,甚至连排序都不用,这个是巧合。(实际的时候要按TID升序排序)
这个是昨天的提问,
现在我想添加两个功能。
功能一: 图1的时候,有一个TopID,就是只最顶层的ID,
例如GTID=8的 父级是0,那么证明他说最顶了,所以他的顶层TopID就是他本身
但是GTID=13的 父级是10,但是10的父级是8,8的顶层是0(最顶),所以GTID=13的TOPID=8
这个功能是每插入一条新的信息的时候,需要更新一个TopID,这个怎么连接,
功能二,昨天说的是 返回一张表 包含 GTID,GTName的表,现在要加多一个字段。isDeep
这个字段标示当前的GTID是不是最底层的GTID,如果是,则isDeep=1 否则为0
比如:
GTID=8的时候,他下面还有9,10,他肯定不是最底的,所以 isDeep=0
GTID=13的时候,他就是第三级的了,也是最底的了 所以isDeep=1
昨天有大神答了,但是我现在还在琢磨,看得不是很懂...
这是昨天的代码
;WITH CTE AS(
SELECT TID,CAST(TName AS VARCHAR(8000))TName,CAST('' AS VARCHAR(8000))DEEP
,CAST(TID AS VARCHAR(8000))[PATH]
FROM TB WHERE ParentID=0
UNION ALL
SELECT T1.TID,T2.DEEP+'--'+T1.TName,T2.DEEP+'--'
,T2.[PATH]+'-'+CAST(T1.TID AS VARCHAR(8000))
FROM TB T1
JOIN CTE T2 ON T1.ParentID=T2.TID
)
SELECT TID,TName
FROM CTE
ORDER BY [PATH]
------解决思路----------------------
直接加个层级吧,1表示一层,2表示二层,类推
因此,你判断是不是等于1就是顶级了
;WITH CTE AS(
SELECT TID,CAST(TName AS VARCHAR(8000))TName,CAST('' AS VARCHAR(8000))DEEPStr
,CAST(TID AS VARCHAR(8000))[PATH],1 DEEP
FROM TB WHERE ParentID=0
UNION ALL
SELECT T1.TID,T2.DEEPStr+'--'+T1.TName,T2.DEEPStr+'--'
,T2.[PATH]+'-'+CAST(T1.TID AS VARCHAR(10)),T2.DEEP+1
FROM TB T1
JOIN CTE T2 ON T1.ParentID=T2.TID
)
SELECT TID,TName,DEEP--层级
FROM CTE
ORDER BY [PATH]