`

mysql 部门 递归 新方法

 
阅读更多

SELECT  *  FROM  w_department


/*查询市场部 下 所以 部门 的部门名称*/
SELECT node.department_id,node.department_name
FROM w_department AS node,
w_department AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND parent.department_name = '市场部'
ORDER BY node.lft;


/*查看所有的子部门  是父部门的不显示*/
SELECT department_id,department_name
FROM w_department
WHERE rgt = lft + 1;

/*查看所有的父部门  不包含子部门*/
SELECT parent.department_id,parent.department_name
FROM w_department AS node,
w_department AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.department_name = '市场部'
ORDER BY parent.lft;

 

 

/*查询 部门的级别   0,1,2 树的层级  ,层级深度*/
SELECT node.department_name, (COUNT(parent.department_name) - 1) AS depth
FROM w_department AS node,
w_department AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.department_name
ORDER BY node.lft;

 

/* 根据 部门名称   获取 该部门及下属部门 层级深度*/
/*这个查询语句可以检索出任一节点子树的深度值,包括根节点。这里的深度值跟你指定的节点有关。*/
SELECT node.department_name, (COUNT(parent.department_name) - (sub_tree.depth + 1)) AS depth
FROM w_department AS node,
 w_department AS parent,
 w_department AS sub_parent,
 (
  SELECT node.department_name, (COUNT(parent.department_name) - 1) AS depth
  FROM w_department AS node,
  w_department AS parent
  WHERE node.lft BETWEEN parent.lft AND parent.rgt
  AND node.department_name = '总办'
  GROUP BY node.department_name
  ORDER BY node.lft
 )AS sub_tree
WHERE node.lft BETWEEN parent.lft AND parent.rgt
 AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
 AND sub_parent.department_name = sub_tree.department_name
GROUP BY node.department_name
ORDER BY node.lft;

 

 

/* 我们可以根据depth值来缩进分类名字,使用CONCAT和REPEAT字符串函数:*/
/*当然,在客户端应用程序中你可能会用depth值来直接展示数据的层次。Web开发者会遍历该树,随着depth值的增加和减少来添加<li></li>和<ul></ul>标签。*/
SELECT CONCAT( REPEAT(' ', COUNT(parent.department_name) - 1), node.department_name) AS NAME
FROM w_department AS node,
w_department AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.department_name
ORDER BY node.lft;

 

/*根据部门名称 查询 该部门 与第一层级部门的信息*/
SELECT node.department_name, (COUNT(parent.department_name) - (sub_tree.depth + 1)) AS depth
FROM w_department AS node,
 w_department AS parent,
 w_department AS sub_parent,
 (
  SELECT node.department_name, (COUNT(parent.department_name) - 1) AS depth
  FROM w_department AS node,
  w_department AS parent
  WHERE node.lft BETWEEN parent.lft AND parent.rgt
  AND node.department_name = '总办'
  GROUP BY node.department_name
  ORDER BY node.lft
 )AS sub_tree
WHERE node.lft BETWEEN parent.lft AND parent.rgt
 AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
 AND sub_parent.department_name = sub_tree.department_name
GROUP BY node.department_name
HAVING depth <= 1
ORDER BY node.lft;

 


/*执行新增*/
CALL  pro_add_dep('01587bc0c3264dc0b6555fdb77204d83','财务1部','cw1','','','','',NULL,'','0b393bf7589f42f4b06e2cbd507b45e2','0b393bf7589f42f4b06e2cbd507b45e2','2015-12-08 15:02:51','2015-12-08 15:03:00','fc5bdb145d884cd2a65880cac43dd994','69985e19c50d47e3b16a86401d26aade');
/*执行删除*/
CALL pro_del_dep('01587bc0c3264dc0b645afdb77204d81');

SELECT * FROM w_department

 

分享到:
评论

相关推荐

    MySQL实现递归查询的三种方式.rar

    MySQL数据库在处理涉及层次结构或递归的数据时,提供了多种方法。本压缩包中的内容主要介绍了三种实现递归查询的方法,适用于不同的需求和环境。以下是这三种方式的详细说明: ### 方式一:使用自定义函数实现 在...

    PHP MYSQL 用递归写的留言本核心程序

    在计算机科学中,递归是一种解决问题的方法,它将问题分解为更小的子问题,直到子问题简单到可以直接解决。在本例中,递归可能用于展示留言的回复。如果留言可以有多个层级的回复,比如一级回复、二级回复等,递归则...

    mysql递归调用获取树节点(子树)

    在提供的`mysql递归调用获取树节点(子树).doc`文档中,应该详细解释了这个过程,包括如何创建和执行存储过程,以及如何使用提供的测试数据。确保查看文档以获取完整的步骤和示例,以便在实际项目中成功应用这些...

    一种MySQL数据库SQL递归查询的研究与实现.pdf

    【MySQL数据库SQL递归查询的研究与实现】 MySQL是一种广泛应用的关系型数据库管理系统,以其开源、高效和跨平台等特性,尤其适合中小型网站的部署。虽然MySQL在处理常规数据操作和查询方面表现出色,但在某些特定...

    MySQL递归查询树状表的子节点、父节点具体实现

    在MySQL中,处理树状数据结构的查询是一个挑战,因为直到MySQL 8.0版本才引入了`WITH RECURSIVE`子句来支持递归查询。然而,在MySQL 5.0.94及更早版本中,如描述中提到的,没有内置的递归查询功能。为了遍历树状表的...

    sql_函数实现三种父子递归

    在SQL中,递归函数是处理层次结构数据的有效方法,特别是在构建树形结构如菜单树或权限树时。本文将探讨如何使用SQL函数实现三种常见的递归查询:找到所有子节点、查找所有父节点以及面包屑导航数据。我们将通过一个...

    MySQL之递归小问题

    在MySQL中,尽管原生语法并不直接支持递归查询,...然而,为了提高效率和可读性,对于新版本的MySQL,建议利用内置的递归CTE功能来处理这类问题。对于旧版本的MySQL,上述的自连接和临时表方法仍是一种实用的解决方案。

    MySQL实现树状所有子节点查询的方法

    然而,尽管MySQL不直接支持这样的功能,我们仍然可以通过其他方法来达到相同的效果。以下将详细介绍几种在MySQL中实现树状结构子节点查询的方法。 **方法一:利用函数获取所有子节点号** 1. **创建自定义函数`...

    mysql-server-mysql-5.7.36.tar.gz

    `mysql-server-mysql-5.7.36.tar.gz` 是MySQL服务器的一个特定版本,版本号为5.7.36,它以tar.gz格式打包,这是一种在Linux和Unix-like操作系统中常见的归档和压缩方法。 MySQL 5.7版本是MySQL发展中的一个重要里程...

    MySQL数据库 mysql-8.0.11-winx64.zip

    MySQL 8.0是MySQL的重大更新版本,它引入了许多新特性和性能改进,旨在提供更高效、安全和可扩展的数据存储解决方案。以下是一些关键的知识点: 1. **新特性**: - **窗口函数**:MySQL 8.0引入了窗口函数,允许...

    Mysql 8.0.15

    5. **动态柱状图(Dynamic Columns)**:虽然不是标准 SQL 功能,但 MySQL 8.0 提供了一种存储多个值的方法,类似于 NoSQL 数据库的键值对,这在某些场景下可以提高数据存储的灵活性。 6. **更好的密码安全**:...

    MySQL--视图的定义

    - **CASCADE**: 当使用此选项时,MySQL不仅检查当前视图的条件,还会递归地检查所有依赖于该视图的其他视图的条件。 - **LOCAL**: 此选项只检查当前视图的条件,对于依赖它的视图则不进行检查。如果依赖视图自身带有...

    腾讯地图行政区域经纬度转Mysql国内地区数据库

    对于这个数据库的设计,`parent_id` 字段是实现行政区域树状结构的关键,通过递归查询或连接操作,可以轻松地获取某个区域的所有子区域。同时,`latitude` 和 `longitude` 字段使得我们可以利用Haversine公式或其他...

    MySql 中查询树形结构的全部子项列表 Function

    本文将深入探讨如何在MySQL中查询树形结构的全部子项列表,结合提供的`MySql_Link_Function.sql`文件,我们将探讨一种有效的方法来实现这一功能。 首先,树形结构在数据库中的存储通常采用自引用的方式,即每个节点...

    PHP递归实现的无限分类.docx

    需要注意的是,这个实现使用了`mysql_`系列函数,这是较老的MySQL API,已经被弃用,不推荐在新项目中使用。现代的PHP项目应该使用`mysqli_`或PDO扩展来连接和操作MySQL数据库,以获得更好的性能、安全性和功能支持...

    全面递归省市区存库.zip

    2. **递归算法**: 递归是编程中一种重要的解决问题的方法,它通过函数自身调用自身来解决复杂问题。在这个场景下,递归用于遍历省市区的层级结构。例如,首先读取省份数据,然后对每个省份递归调用同样的函数去获取...

    PHP和MySQL Web开发第4版pdf以及源码

    5.10 实现递归 5.10.1 名称空间 5.11 进一步学习 5.12 下一章 第6章 面向对象的PHP 6.1 理解面向对象的概念 6.1.1 类和对象 6.1.2 多态性 6.1.3 继承 6.2 在PHP中创建类、属性和操作 6.2.1 类的结构 ...

    mysql-5.7.33-winx64.rar

    在功能更新上,MySQL 5.7 引入了窗口函数,这是一种在 SQL 查询中进行聚合计算的新方法,允许用户在不使用子查询或自连接的情况下进行复杂的分析操作。另外,JSON 数据类型和相关函数的添加,使得 MySQL 能够更好地...

    mysql的概要介绍与分析

    - **公共表表达式(Common Table Expression,CTE)**:一种用于定义临时结果集的有效方法,常用于递归查询和分层数据检索。 #### 六、总结 MySQL作为一款成熟的开源关系型数据库管理系统,不仅具备强大的功能和...

Global site tag (gtag.js) - Google Analytics