有如下需求:
- 部门数据为三级及三级以上的级联数据
- 某个部门的用户登录系统,需要看到其部门及所有子部门的相关数据
以下:采用一个简单的例子实现上述需求,仅供参考
一、数据表
1. 部门表
2. 用户表
样例中,部门数据总共有4级。用户表中有dept_id字段与部门表中的id关联。
梳理一下用户与部门的对应关系:
二、查询SQL
dept_id 为登录用户的所属部门id
SELECT
*
FROM
user
WHERE
dept_id IN (
( SELECT id FROM dept WHERE id = #{dept_id} ) UNION ALL
(
SELECT
id
FROM
(
SELECT
t1.id,
t1.NAME,
IF
( find_in_set( parent_id, @pids ) > 0, @pids := concat( @pids, ',', id ), 0 ) AS ischild
FROM
( SELECT id, parent_id, NAME FROM dept t ORDER BY parent_id, id ) t1,
( SELECT @pids := #{dept_id} ) t2
) t3
WHERE
ischild != 0
)
)