日期:2014-05-18  浏览次数:20590 次

数据库表的建法
我想把菜单中的选项都放入数据库的表里,但有的有二级菜单
比如
冰糕-> 冰淇淋-> 蒙牛-> 草莓
                                        山楂
                            伊犁-> 黄桃
                                        西瓜                
            雪糕-> 蒙牛-> 草莓
                                -> 山楂
                        伊犁-> 小布丁
                                -> 爽
就是一个树的问题
还有一个问题,就是如果二级菜单有四个项,但只能有一个被选中,相当与一个单选按钮,在数据表里怎么实现呢?


------解决方案--------------------
---例子---
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10),flag char(1))
INSERT tb SELECT '001 ',NULL , 'root ',0
UNION ALL SELECT '002 ', '001 ', 'r1 ',0
UNION ALL SELECT '004 ', '002 ', 'r2 ',0
UNION ALL SELECT '003 ', '001 ', 'r3 ',0
UNION ALL SELECT '005 ',NULL , 'r4 ',0
UNION ALL SELECT '006 ', '005 ', 'r5 ',0
UNION ALL SELECT '007 ', '006 ', 'r6 ',0

-----查找指定节点的所有子节点的示例函数
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
DECLARE @Level int
SET @Level=1
INSERT @t_Level SELECT @ID,@Level
WHILE @@ROWCOUNT> 0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level
FROM tb a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
RETURN
END
GO

SELECT a.*
FROM tb a,f_Cid( '001 ') b
WHERE a.ID=b.ID

-----------先面的是树形数据层次显示处理示例----------------


DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10),flag char(1))
INSERT @t SELECT '001 ',NULL , 'root ',0
UNION ALL SELECT '002 ', '001 ', 'r1 ',0
UNION ALL SELECT '004 ', '002 ', 'r2 ',0
UNION ALL SELECT '003 ', '001 ', 'r3 ',0
UNION ALL SELECT '005 ',NULL , 'r4 ',0
UNION ALL SELECT '006 ', '005 ', 'r5 ',0
UNION ALL SELECT '007 ', '006 ', 'r6 ',0

--똑탤埼鞫刻뇹잿
--냥첼몸쌘듐돨긍쯤작셕(宮谿뎠데긍뵀랬돨긍쯤)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT> 0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END


SELECT SPACE(b.Level*8)+ '|-- '+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort

------解决方案--------------------<