当前位置:K88软件开发文章中心编程语言SQLSQL01 → 文章内容

更换无限级分类表结构方法

减小字体 增大字体 作者:wangsdong     来源:asp编程网  发布时间:2018-12-30 9:14:12

无限级分类的问题
最近遇到这样的问题:一个无限级分类表pclass的结构如下
ID cname(分类名称) parentid(父ID)
1&
#160
&
#160
A&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0
2&
#160
&
#160
B&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0
3&
#160
&
#160
a&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
1
4&
#160
&
#160
01&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
3
5&
#160
&
#160
b&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
2
6&
#160
&
#160
02&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
3
在显示的时候,我使用了递归将分类名称显示出来的,现在发现这样非常影响页面打开速度,经过在群中讨论,决定将改成这样的结构
ID cname(分类名称) parentid(父ID)path
1&
#160
&
#160
A&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0
2&
#160
&
#160
B&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0
3&
#160
&
#160
a&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
1&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0,1
4&
#160
&
#160
01&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
3&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0,1,3
5&
#160
&
#160
b&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
2&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0,2
6&
#160
&
#160
02&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
3&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
&
#160
0,1,3&
#160

就是在原来的基础上增加一下path字段,根据原来的结构,使用sql语句,将path赋值。以后使用的时候就方便了,直接使用select * from pclass where id in(path),下面直接使用循环,输出就行了。


'无限级分类表的结构转换
'来源:www.aspprogram.cn
'整理:wangsdong
'原创文章,转载请保留此信息

感谢guguda2008提供的方法,我放到这里与大家共享,希望能帮助到需要的朋友
WITH MU AS (
SELECT ID,CNAME,PARENTID,CONVERT(VARCHAR(MAX),'0') AS [PATH] FROM pclass WHERE PARENTID=0
UNION ALL
SELECT
T1.ID,T1.CNAME,T1.PARENTID,T2.[PATH]+','+LTRIM(T2.ID)
FROM pclass T1
INNER JOIN MU T2 ON T1.PARENTID=T2.ID
)
UPDATE PCLASS SET PATH=(SELECT PATH FROM MU WHERE MU.ID=PCLASS.ID)

注意一下:这个sql语句只能在sql server,oracle数据库上运行,不能在access上运行。



更换无限级分类表结构方法