求一个复杂的sql问题

修炼成精 2009-04-18 05:11:59
我想做个级联菜单
数据库中记录如下
id name parentid
-------------------
1 一级菜单1 0
2 一级菜单2 0
3 一级菜单3 0
4 二级菜单1 1
5 二级菜单1 2
6 三级菜单1 4
7 三级菜单2 4
7 四级菜单1 6
-------------------
我想分别查出来菜单
<ul>
<li>一级菜单1</li>
<ul>
<li>二级菜单1</li>
</ul>
<li>一级菜单2</li>
<ul>
<li>二级菜单1</li>
<ul>
<li>三级菜单1</li>
<li>四级菜单1</li>
<li>三级菜单2</li>
</ul>
</ul>
<li>一级菜单3</li>
</ul>
不知道这样得怎吗写sql,谢谢
...全文
166 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
issacp 2009-04-24
  • 打赏
  • 举报
回复
帮顶
htl258_Tony 2009-04-22
  • 打赏
  • 举报
回复
xml正在学习,帮顶先.
修炼成精 2009-04-18
  • 打赏
  • 举报
回复
我这个是access
楼上是想用xml来记录菜单么?
不知道如何asp添加菜单时候是如何操作xml
不知道2楼的杰作在asp操作access上怎吗写?

claro 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 milk111 的回复:]
xml完全不知道哈
[/Quote]帮顶
milk111 2009-04-18
  • 打赏
  • 举报
回复
xml完全不知道哈
  • 打赏
  • 举报
回复
--测试数据
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'

--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
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*2)+'|--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/
时光瞄 2009-04-18
  • 打赏
  • 举报
回复
期待高手...

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧