一、场景
有一个数据库表里面存储了一个上下级关系的字段,通过存储这个觉得的上级id。如果要查找所有的上级或者下级就要通过循环每个去查找。如下
id | p_id | name |
---|---|---|
1 | 0 | 老板 |
2 | 1 | 副总 |
3 | 1 | 副总 |
4 | 2 | 项目总监 |
5 | 4 | A项目经理 |
6 | 4 | B项目经理 |
7 | 5 | A1员工 |
8 | 5 | A2员工 |
9 | 6 | B1员工 |
10 | 6 | B2员工 |
举例:如果要找所有10号员工的所有上级,就得一步一步循环上去?
二、解决方法
思路采用一个递归方法,先将层级结构用一个字段存储起来
表结构和数据
CREATE TABLE [dbo].[test] (
[id] int NOT NULL ,
[name] varchar(255) NULL ,
[pid] int NULL
)
GO
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO [dbo].[test] ([id], [name], [pid]) VALUES (N'1', N'老板', N'0')
GO
GO
INSERT INTO [dbo].[test] ([id], [name], [pid]) VALUES (N'2', N'副总', N'1')
GO
GO
INSERT INTO [dbo].[test] ([id], [name], [pid]) VALUES (N'3', N'副总', N'1')
GO
GO
INSERT INTO [dbo].[test] ([id], [name], [pid]) VALUES (N'4', N'项目总监', N'2')
GO
GO
INSERT INTO [dbo].[test] ([id], [name], [pid]) VALUES (N'5', N'A项目经理', N'4')