根据传入节点查询该节点下的所有子节点

  1. SELECT dept_id, dept_name
  2. FROM (
  3. SELECT t1.dept_id,
  4. t1.dept_name,
  5. if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', dept_id), 0) AS ischild
  6. FROM (
  7. SELECT dept_id, parent_id, dept_name
  8. FROM sys_dept t
  9. WHERE t.del_flag = 0
  10. ORDER BY dept_id, parent_id
  11. ) t1,
  12. (SELECT @pids := '101' id) t2
  13. ) t3
  14. WHERE ischild != 0

根据传入节点查询该节点上的所有父节点

  1. SELECT T2.dept_id, T2.dept_name, T2.parent_id
  2. FROM (
  3. SELECT @r AS id,
  4. (SELECT @r := parent_id FROM sys_dept WHERE dept_id = id) AS pid,
  5. @l := @l + 1 AS lvl
  6. FROM (SELECT @r := '104', @l := 0) vars,
  7. sys_dept h
  8. WHERE @r <> 0) T1
  9. JOIN sys_dept T2
  10. ON T1.id = T2.dept_id