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数据库在处理涉及层次结构或递归的数据时,提供了多种方法。本压缩包中的内容主要介绍了三种实现递归查询的方法,适用于不同的需求和环境。以下是这三种方式的详细说明: ### 方式一:使用自定义函数实现 在...
在计算机科学中,递归是一种解决问题的方法,它将问题分解为更小的子问题,直到子问题简单到可以直接解决。在本例中,递归可能用于展示留言的回复。如果留言可以有多个层级的回复,比如一级回复、二级回复等,递归则...
在提供的`mysql递归调用获取树节点(子树).doc`文档中,应该详细解释了这个过程,包括如何创建和执行存储过程,以及如何使用提供的测试数据。确保查看文档以获取完整的步骤和示例,以便在实际项目中成功应用这些...
【MySQL数据库SQL递归查询的研究与实现】 MySQL是一种广泛应用的关系型数据库管理系统,以其开源、高效和跨平台等特性,尤其适合中小型网站的部署。虽然MySQL在处理常规数据操作和查询方面表现出色,但在某些特定...
在MySQL中,处理树状数据结构的查询是一个挑战,因为直到MySQL 8.0版本才引入了`WITH RECURSIVE`子句来支持递归查询。然而,在MySQL 5.0.94及更早版本中,如描述中提到的,没有内置的递归查询功能。为了遍历树状表的...
在SQL中,递归函数是处理层次结构数据的有效方法,特别是在构建树形结构如菜单树或权限树时。本文将探讨如何使用SQL函数实现三种常见的递归查询:找到所有子节点、查找所有父节点以及面包屑导航数据。我们将通过一个...
在MySQL中,尽管原生语法并不直接支持递归查询,...然而,为了提高效率和可读性,对于新版本的MySQL,建议利用内置的递归CTE功能来处理这类问题。对于旧版本的MySQL,上述的自连接和临时表方法仍是一种实用的解决方案。
然而,尽管MySQL不直接支持这样的功能,我们仍然可以通过其他方法来达到相同的效果。以下将详细介绍几种在MySQL中实现树状结构子节点查询的方法。 **方法一:利用函数获取所有子节点号** 1. **创建自定义函数`...
`mysql-server-mysql-5.7.36.tar.gz` 是MySQL服务器的一个特定版本,版本号为5.7.36,它以tar.gz格式打包,这是一种在Linux和Unix-like操作系统中常见的归档和压缩方法。 MySQL 5.7版本是MySQL发展中的一个重要里程...
MySQL 8.0是MySQL的重大更新版本,它引入了许多新特性和性能改进,旨在提供更高效、安全和可扩展的数据存储解决方案。以下是一些关键的知识点: 1. **新特性**: - **窗口函数**:MySQL 8.0引入了窗口函数,允许...
5. **动态柱状图(Dynamic Columns)**:虽然不是标准 SQL 功能,但 MySQL 8.0 提供了一种存储多个值的方法,类似于 NoSQL 数据库的键值对,这在某些场景下可以提高数据存储的灵活性。 6. **更好的密码安全**:...
- **CASCADE**: 当使用此选项时,MySQL不仅检查当前视图的条件,还会递归地检查所有依赖于该视图的其他视图的条件。 - **LOCAL**: 此选项只检查当前视图的条件,对于依赖它的视图则不进行检查。如果依赖视图自身带有...
对于这个数据库的设计,`parent_id` 字段是实现行政区域树状结构的关键,通过递归查询或连接操作,可以轻松地获取某个区域的所有子区域。同时,`latitude` 和 `longitude` 字段使得我们可以利用Haversine公式或其他...
本文将深入探讨如何在MySQL中查询树形结构的全部子项列表,结合提供的`MySql_Link_Function.sql`文件,我们将探讨一种有效的方法来实现这一功能。 首先,树形结构在数据库中的存储通常采用自引用的方式,即每个节点...
需要注意的是,这个实现使用了`mysql_`系列函数,这是较老的MySQL API,已经被弃用,不推荐在新项目中使用。现代的PHP项目应该使用`mysqli_`或PDO扩展来连接和操作MySQL数据库,以获得更好的性能、安全性和功能支持...
2. **递归算法**: 递归是编程中一种重要的解决问题的方法,它通过函数自身调用自身来解决复杂问题。在这个场景下,递归用于遍历省市区的层级结构。例如,首先读取省份数据,然后对每个省份递归调用同样的函数去获取...
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 引入了窗口函数,这是一种在 SQL 查询中进行聚合计算的新方法,允许用户在不使用子查询或自连接的情况下进行复杂的分析操作。另外,JSON 数据类型和相关函数的添加,使得 MySQL 能够更好地...
- **公共表表达式(Common Table Expression,CTE)**:一种用于定义临时结果集的有效方法,常用于递归查询和分层数据检索。 #### 六、总结 MySQL作为一款成熟的开源关系型数据库管理系统,不仅具备强大的功能和...