sql查询的无限分类查询的设计

来源:互联网 发布:推广软件破解版 编辑:程序博客网 时间:2024/06/06 06:55

最近在找一次sql查询的无限分类查询的设计,网上找了一下这个数据表的设计很有特色,
不用递归,依靠个简单SQL语句就能列出菜单,看看这个数据表怎么设计的,并对下面的数据表结构的查询进行分析.
数据库字段大概如下:
-----------------------------------------------------------------------------------
id              编号
fid             父分类编号
name         分类名
path          分类路径,以 id 为节点,组成类似    ,1,2,3,4, 这样的字符串
----------------------------------------------------------------------------------
可以假设有如下的数据
id      fid          name             path
----------------------------------------------------
1       0           分类1             ,1,
2       0           分类2             ,2,
3       1           分类1-1          ,1,3,
4       1           分类1-2          ,1,4,
5       2           分类2-1          ,2,5,
6       4           分类1-2-1       ,1,4,6,
----------------------------------------------------
查询分类2底下的所有分类

============================底下是测试数据=============================

--添加分类表
create table tab
(
id int,
fid int,
name varchar(100),
path varchar(100)
)
go
INSERT INTO [tab]([id],[fid],[name],[path])VALUES(1,0,'分类1',',1,')
INSERT INTO [tab]([id],[fid],[name],[path])VALUES(2,0,'分类2',',2,')
INSERT INTO [tab]([id],[fid],[name],[path])VALUES(3,0,'分类3',',3,')
INSERT INTO [tab]([id],[fid],[name],[path])VALUES(4,2,'分类4-2',',2,4,')
INSERT INTO [tab]([id],[fid],[name],[path])VALUES(5,2,'分类5-2',',2,5,')
INSERT INTO [tab]([id],[fid],[name],[path])VALUES(6,1,'分类1-1',',6,1,')
INSERT INTO [tab]([id],[fid],[name],[path])VALUES(7,4,'分类7-4-2',',7,4,2,')
INSERT INTO [tab]([id],[fid],[name],[path])VALUES(8,5,'分类8-5-2',',8,5,2,')
INSERT INTO [tab]([id],[fid],[name],[path])VALUES(9,7,'分类9-7-4-2',',9,7,4,2,')
go
select * from tab where charindex(',2,',path)>0

go
--添加文章表
create table article
(
aid int,
id int,
aname varchar(100),
)
go
INSERT INTO [article]([aid],[id],[aname])VALUES(1,1,'1这是名称1111111111111111111')
INSERT INTO [article]([aid],[id],[aname])VALUES(1,4,'4这是名称444444444444444444444444')
INSERT INTO [article]([aid],[id],[aname])VALUES(1,7,'7这是名称777777777777777777777777')
INSERT INTO [article]([aid],[id],[aname])VALUES(1,9,'9这是名称999999999999999999999999')
INSERT INTO [article]([aid],[id],[aname])VALUES(1,4,'4这是名称44444444444444444444')
INSERT INTO [article]([aid],[id],[aname])VALUES(1,9,'4这是名称999999999999999999999999')
go
select * from article inner join tab on tab.id=article.id where  charindex(',2,',path)>0

go
drop table tab
drop table article

 

原创粉丝点击