Quantcast
Channel: 冰山上的播客 » SQL
Viewing all articles
Browse latest Browse all 10

SQL无限分级结构 分类路径

$
0
0

最近在找一次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

Viewing all articles
Browse latest Browse all 10

Latest Images

Trending Articles





Latest Images