求一算法(急)
各位老大,我想向各位求一个算法,这个问题我想了很长时间,就是关于树形菜单的一个算法,比如说父节点的id为10000000000,其子节点就为10010000000,子节点的子节点为10010100000,依似类推,也是是从子节点中得知根节点和父节点的id号,请各位指教! 问题点数:20、回复次数:5Top
1 楼huangguolinc(来了)回复于 2005-06-01 15:03:26 得分 0
一定要用你的方式吗?
我的方法是:
100
--100100
----100100100
----100100101
--100101
----100101100
101
--101100
3位一组,你需要什么,怎么截取,你就能知道它处在什么位置,总位数/3就是它的级别
也可以使用 like操作将其子节点都找到Top
2 楼huangguolinc(来了)回复于 2005-06-01 15:06:38 得分 0
在什么情况下,要从子去找父呢?一般的问题都能正向查找就能解决,如果一定要逆向的话,就截字符串吧Top
3 楼startray(孙悟空庄重宣布:从现在开始,国民进入抗日非常时期!(即不买卖日本的一切东西))回复于 2005-06-01 16:11:12 得分 0
写一个递归函数Top
4 楼jxdyzwh(http://www.szsoftware.com.cn)回复于 2005-06-01 16:18:12 得分 0
huangguolinc(来了)老兄,我要的就是这个东东,有没有程序,让我参考一下,Top
5 楼huangguolinc(来了)回复于 2005-06-02 09:49:51 得分 20
我的程序现在有业务在里面,你看起来会很吃力,很麻烦,我说说整个思路吧
classes表中有字段class,classname,classtype
class表示级别
classname表示级别名称
classtype表示级别类别,比如部门管理,信息管理
表中数据有
1000 部门管理 department
10001000 总公司
100010001000 哈尔滨分公司
100010001001 长春分公司
1000100010001000 销售部
1000100010001001 市场部
1001 信息管理 info
10011000 新闻中心
10011001 企业知识库
... ...
下面是级别管理的存储过程,你看看对你有没有帮助
------------------------------------------------------------------------------------
-----目录级别管理
------------------------------------------------------------------------------------
--目录树
if exists (select name from sysobjects where name='ClassTree' and type='p')
drop procedure ClassTree
go
create procedure ClassTree
@ClassType varchar(100)
with encryption
as
select * from classes where Class like (select Class from classes where ClassType=@ClassType)+'%' order by Class
go
--查看级别内容
if exists (select name from sysobjects where name='ClassView' and type='p')
drop procedure ClassView
go
create procedure ClassView
@ClassID int
with encryption
as
select * from classes where ClassID=@ClassID
go
--获取级别字符串,并新建级别
if exists (select name from sysobjects where name='ClassNew' and type='p')
drop procedure ClassNew
go
create procedure ClassNew
@ClassID int,
@ClassName varchar(100)
with encryption
as
declare @Class varchar(255),@rClass varchar(255),@lClass char(4),@Length int
select @Class=max(Class) from Classes where Class like (select Class from Classes where ClassID=@ClassID)+'____'
if (@Class is not null)
begin
set @Length=len(@Class)-3
set @lClass=substring(@Class,@Length,4)
set @rClass=substring(@Class,0,@length)
set @lClass=@lClass+1
set @Class=@rClass+@lClass
end
else
begin
select @Class=Class from Classes where ClassID=@ClassID
set @Class=@Class+'1000'
end
if(@Class is not null)
begin
insert into Classes(Class,ClassName) values(@Class,@ClassName)
end
select @Class as Class
go
--修改级别名称
if exists (select name from sysobjects where name='ClassUpdate' and type='p')
drop procedure ClassUpdate
go
create procedure ClassUpdate
@ClassID int,
@ClassName varchar(100)
with encryption
as
update classes set ClassName=@ClassName where ClassID=@ClassID
go
--删除级别
if exists (select name from sysobjects where name='ClassDelete' and type='p')
drop procedure ClassDelete
go
create procedure ClassDelete
@ClassID int
with encryption
as
declare @Class varchar(255)--用于处理级别负责人
select @Class=Class from Classes where ClassID=@ClassID
delete from Classes where len(Class)<>4 and (ClassID=@ClassID or Class like @Class+'%')
go
--某类类别内容的选择
if exists (select name from sysobjects where name='ClassSelectItem' and type='p')
drop procedure ClassSelectItem
go
create procedure ClassSelectItem
@ClassType varchar(100)
with encryption
as
select * from classes where Class like (select Class from classes where ClassType=@ClassType)+'____%' order by Class
go
--级别名称
if exists (select name from sysobjects where name='ClassName' and type='p')
drop procedure ClassName
go
create procedure ClassName
@ClassID varchar(255)
with encryption
as
select * from classes where class=@ClassID
goTop




