无限级分类的问题
最近遇到这样的问题:一个无限级分类表pclass的结构如下
ID cname(分类名称) parentid(父ID)
1 A 0
2 B 0
3 a 1
4 01 3
5 b 2
6 02 3
在显示的时候,我使用了递归将分类名称显示出来的,现在发现这样非常影响页面打开速度,经过在群中讨论,决定将改成这样的结构
ID cname(分类名称) parentid(父ID)path
1 A 0 0
2 B 0 0
3 a 1 0,1
4 01 3 0,1,3
5 b 2 0,2
6 02 3 0,1,3
就是在原来的基础上增加一下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上运行。