树形菜单的经典算法(用Function实现估计没有比这个更简洁的算法啦)
2006-03-13 17:04
597 查看
--生成测试数据
CREATE TABLE T_TABLE(
id int IDENTITY(1,1) NOT NULL,
upid int NULL,
title [varchar](50))
INSERT INTO T_TABLE (upid,title) values(0,'1TITLE')
INSERT INTO T_TABLE (upid,title) values(0,'2TITLE')
INSERT INTO T_TABLE (upid,title) values(0,'3TITLE')
INSERT INTO T_TABLE (upid,title) values(2,'4TITLE')
INSERT INTO T_TABLE (upid,title) values(2,'5TITLE')
INSERT INTO T_TABLE (upid,title) values(4,'6TITLE')
INSERT INTO T_TABLE (upid,title) values(3,'7TITLE')
INSERT INTO T_TABLE (upid,title) values(3,'8TITLE')
INSERT INTO T_TABLE (upid,title) values(7,'9TITLE')
INSERT INTO T_TABLE (upid,title) values(8,'10TITLE')
INSERT INTO T_TABLE (upid,title) values(9,'11TITLE')
INSERT INTO T_TABLE (upid,title) values(7,'12TITLE')
INSERT INTO T_TABLE (upid,title) values(12,'13TITLE')
--树形菜单的函数
CREATE FUNCTION [dbo].[getTree] (@id int)
RETURNS @t table(id int,upid int,title varchar(50),TLevel int,LevelSort varchar(1000) PRIMARY KEY (LevelSort)) AS
begin
declare @TLevel int
set @TLevel=0
insert into @t select id,upid,title,@TLevel,str(ID,10) from T_TABLE where id=@id
while @@rowCount>0
begin
set @TLevel=@TLevel+1
insert into @t select a.id,a.upid,a.title,@TLevel,b.LevelSort+str(a.id,10) from T_TABLE a join @t b on b.id=a.upid where b.TLevel=@TLevel-1
end
return
End
LevelSort的生成算法比较重要
Str(ID,10) LeverSort一定要是固定长度的列.Str用空格填充多余的空间
www.hotmy.com 感谢空间的主人
migichen (双启科技 hotmy.com【QQ群:7812131 asp.net C#】) 提出这个问题
CREATE TABLE T_TABLE(
id int IDENTITY(1,1) NOT NULL,
upid int NULL,
title [varchar](50))
INSERT INTO T_TABLE (upid,title) values(0,'1TITLE')
INSERT INTO T_TABLE (upid,title) values(0,'2TITLE')
INSERT INTO T_TABLE (upid,title) values(0,'3TITLE')
INSERT INTO T_TABLE (upid,title) values(2,'4TITLE')
INSERT INTO T_TABLE (upid,title) values(2,'5TITLE')
INSERT INTO T_TABLE (upid,title) values(4,'6TITLE')
INSERT INTO T_TABLE (upid,title) values(3,'7TITLE')
INSERT INTO T_TABLE (upid,title) values(3,'8TITLE')
INSERT INTO T_TABLE (upid,title) values(7,'9TITLE')
INSERT INTO T_TABLE (upid,title) values(8,'10TITLE')
INSERT INTO T_TABLE (upid,title) values(9,'11TITLE')
INSERT INTO T_TABLE (upid,title) values(7,'12TITLE')
INSERT INTO T_TABLE (upid,title) values(12,'13TITLE')
--树形菜单的函数
CREATE FUNCTION [dbo].[getTree] (@id int)
RETURNS @t table(id int,upid int,title varchar(50),TLevel int,LevelSort varchar(1000) PRIMARY KEY (LevelSort)) AS
begin
declare @TLevel int
set @TLevel=0
insert into @t select id,upid,title,@TLevel,str(ID,10) from T_TABLE where id=@id
while @@rowCount>0
begin
set @TLevel=@TLevel+1
insert into @t select a.id,a.upid,a.title,@TLevel,b.LevelSort+str(a.id,10) from T_TABLE a join @t b on b.id=a.upid where b.TLevel=@TLevel-1
end
return
End
LevelSort的生成算法比较重要
Str(ID,10) LeverSort一定要是固定长度的列.Str用空格填充多余的空间
www.hotmy.com 感谢空间的主人
migichen (双启科技 hotmy.com【QQ群:7812131 asp.net C#】) 提出这个问题
相关文章推荐
- 经典谱估计算法(相关函数法,周期图就法,平滑周期图法)的C++实现
- 经典快速排序,linux纯C实现。注意swap方法,并且这个算法还需再敲写15篇。
- 【LeetCode-面试算法经典-Java实现】【004-Median of Two Sorted Arrays(两个排序数组的中位数)】
- javascript实现树形菜单的方法
- 白话经典算法系列之五 归并排序的实现
- 白话经典算法系列之三 希尔排序的实现
- 白话经典算法系列之一 冒泡排序的三种实现
- JavaScript经典算法实现
- 经典算法学习——非循环双向链表实现冒泡排序(带头结点尾结点)
- Android提高十七篇之多级树形菜单的实现
- ExtJs Treepanel 实现整个树形菜单刷新
- 机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树
- 用php实现简单的树形菜单
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之五 归并排序的实现
- PHP实现各种经典算法
- 白话经典算法系列之一 冒泡排序的三种实现
- 经典算法之希尔排序(三种实现)
- 【LeetCode-面试算法经典-Java实现】【017-Letter Combinations of a Phone Number (电话号码上的单词组合)】
- 【LeetCode-面试算法经典-Java实现】【134-Gas Station(加油站问题)】