MySql数据库查询多级部门及其下的所有用户信息

关于多级别菜单栏或者权限系统中部门上下级的树形遍历,oracle中有connect by来实现,  mysql没有这样的便捷途径,所以MySQL遍历数据表是我们经常会遇到的头痛问题,下面通过数据库函数来实现

1、建表

①  机构表

CREATE TABLE `t_sys_org` (

`ID` varchar(64) NOT NULL COMMENT ‘主键ID‘,

`CODE` varchar(60) DEFAULT NULL COMMENT ‘编码‘,

`NAME` varchar(200) DEFAULT NULL COMMENT ‘机构名称‘,

`FULLNAME` varchar(100) DEFAULT NULL,

`SHORTNAME` varchar(60) DEFAULT NULL COMMENT ‘机构简称‘,

`ORGCODE` varchar(60) DEFAULT NULL COMMENT ‘机构代码‘,

`PARENTID` varchar(64) DEFAULT NULL COMMENT ‘上级机构‘,

`DEPTH` int(10) DEFAULT NULL COMMENT ‘深度‘,

`SORT` varchar(24) DEFAULT NULL COMMENT ‘排序‘,

`REMARK` varchar(200) DEFAULT NULL COMMENT ‘备注‘,

`STATUS` varchar(4) DEFAULT NULL COMMENT ‘状态‘,

`ORGTYPE` varchar(2) DEFAULT NULL COMMENT ‘机构类型‘,

`CODENUM` varchar(80) DEFAULT NULL COMMENT ‘单位代码证编号‘,

`LEAGALPERSON` varchar(18) DEFAULT NULL COMMENT ‘机构法人‘,

`LEAGALPERSONID` int(10) DEFAULT NULL COMMENT ‘负责人ID‘,

`SPLITLEADER` varchar(80) DEFAULT NULL COMMENT ‘分管领导‘,

`SPLITLEADERID` int(10) DEFAULT NULL COMMENT ‘分管领导ID‘,

`ADMINLEVEL` varchar(16) DEFAULT NULL COMMENT ‘机构行政级别‘,

`NATURE` varchar(16) DEFAULT NULL COMMENT ‘机构性质‘,

`WORKNATUREB` varchar(100) DEFAULT NULL COMMENT ‘机构工作性质(大类)‘,

`WORKNATUREM` varchar(16) DEFAULT NULL COMMENT ‘机构工作性质(中类)‘,

`WORKNATURES` varchar(100) DEFAULT NULL COMMENT ‘机构工作性质(小类)‘,

`ARECODE` varchar(16) DEFAULT NULL COMMENT ‘单位所隶属行政区划‘,

`ADDRESS` varchar(800) DEFAULT NULL COMMENT ‘单位驻地与地址‘,

`MAILCODE` varchar(16) DEFAULT NULL COMMENT ‘单位邮编‘,

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘机构表(T_SYS_ORG)‘;

②用户表

CREATE TABLE `t_sys_user` (

`ID` varchar(64) NOT NULL COMMENT ‘主键ID‘,

`ACCOUNT` varchar(200) DEFAULT NULL COMMENT ‘账号‘,

`USERNAME` varchar(60) DEFAULT NULL COMMENT ‘姓名‘,

`PASSWORD` varchar(120) DEFAULT NULL COMMENT ‘密码‘,

`IDCARD` varchar(72) DEFAULT NULL COMMENT ‘身份证号‘,

`SEX` varchar(4) DEFAULT NULL COMMENT ‘性别‘,

`CREATETIME` datetime DEFAULT NULL COMMENT ‘创建时间‘,

`MODTIME` datetime DEFAULT NULL COMMENT ‘修改时间‘,

`MODPWDTIME` datetime DEFAULT NULL COMMENT ‘修改密码时间‘,

`REMARK` varchar(500) DEFAULT NULL COMMENT ‘备注‘,

`STATUS` int(10) DEFAULT NULL COMMENT ‘状态‘,

`ADMINLEVLE` varchar(16) DEFAULT NULL COMMENT ‘行政级别‘,

`ALARMBELL` varchar(16) DEFAULT NULL COMMENT ‘警衔‘,

`ARCHIVEDEPTID` decimal(10,0) DEFAULT NULL COMMENT ‘档案部门ID‘,

`AUTHORIZED` varchar(16) DEFAULT NULL COMMENT ‘编制‘,

`BIRTHDAY` datetime DEFAULT NULL COMMENT ‘出生日期‘,

`BIRTHPLACE` varchar(128) DEFAULT NULL COMMENT ‘籍贯‘,

`CREATEBY` decimal(10,0) DEFAULT NULL COMMENT ‘创建人‘,

`EDUCATIONALBG` varchar(16) DEFAULT NULL COMMENT ‘最高学历‘,

`MODIFYBY` decimal(10,0) DEFAULT NULL COMMENT ‘修改人‘,

`NATION` varchar(16) DEFAULT NULL COMMENT ‘民族‘,

`POLICENUMBER` varchar(64) DEFAULT NULL COMMENT ‘警号‘,

`POLITICAL` varchar(16) DEFAULT NULL COMMENT ‘政治面貌‘,

`POSITION` varchar(16) DEFAULT NULL COMMENT ‘职务‘,

`POSITIONLEVLE` varchar(16) DEFAULT NULL COMMENT ‘职级‘,

`SORTNO` varchar(200) DEFAULT NULL COMMENT ‘排序级别‘,

`WORKDEPTID` varchar(64) DEFAULT NULL COMMENT ‘工作部门ID‘,

`ORGID` varchar(64) DEFAULT NULL COMMENT ‘所属机构‘,

`USERSTATUS` decimal(10,0) DEFAULT NULL COMMENT ‘用户状态‘,

`COCALLSTATUS` decimal(10,0) DEFAULT NULL COMMENT ‘即时通同步状态‘,

`COMPOSITIONDEPTID` decimal(10,0) DEFAULT NULL COMMENT ‘编制部门‘,

`RECORDSMAGORG` varchar(100) DEFAULT NULL COMMENT ‘档案管理单位‘,

`NICKNAME` varchar(64) DEFAULT NULL COMMENT ‘昵称‘,

`WORKNUMBER` varchar(100) DEFAULT NULL COMMENT ‘工作证号‘,

`USERKEY` text COMMENT ‘用户键值‘,

`PARTJOBNO` varchar(4) DEFAULT NULL,

`IMG_PATH` varchar(200) DEFAULT NULL COMMENT ‘照片路径‘,

PRIMARY KEY (`ID`),

UNIQUE KEY `ACCOUNT_UNIQUE` (`ACCOUNT`) USING BTREE,

KEY `IND_SUSR_ORGID` (`ORGID`) USING BTREE,

KEY `IND_SUSR_STAT` (`STATUS`) USING BTREE,

KEY `IND_SUSR_STNO` (`SORTNO`) USING BTREE,

KEY `IND_SUSR_USTAT` (`USERSTATUS`) USING BTREE,

KEY `IND_SUSR_WDPID` (`WORKDEPTID`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘用户表‘;

3、使用FUNCTION根据指定的ID流水号获取多级部门编号(包括当前ID)

BEGIN

DECLARE sTemp VARCHAR(4000);

DECLARE sTempChd VARCHAR(4000);

SET sTemp = ‘$‘;

SET sTempChd = cast(orgId  as char);

WHILE sTempChd is not NULL DO

SET sTemp = CONCAT(sTemp,‘,‘,sTempChd);

SELECT group_concat(id) INTO sTempChd FROM t_sys_org where FIND_IN_SET(parentId,sTempChd)>0;

END WHILE;

return sTemp;

END

4、根据部门ID获取该部门下的所有子部门

select id from t_sys_org where  FIND_IN_SET ( id,  queryAllChildByOrg(‘448457‘)) order by code;

5、根据获取的子部门获取其所有的用户信息

select username, WORKDEPTID from t_sys_user where WORKDEPTID in select id from t_sys_org where  FIND_IN_SET ( id,  queryAllChildByOrg(‘448457‘)) order by code)

时间: 2024-10-10 00:58:02

MySql数据库查询多级部门及其下的所有用户信息的相关文章

提高MySQL数据库查询效率的几个技巧(转载)

[size=5][color=Red]提高MySQL数据库查询效率的几个技巧(转)[/color][/size]      MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一定要保持查询和插入的高效.以下是我在使用过程中做的提高效率的三个有效的尝试. l 使用statement进行绑定查询 使用statement可以提前构建查询语法树,在查询时不再

【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)

上次在<[php]利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6>(点击打开链接) 一文中,对于php查询Mysql数据库的model.php写法还不够完善,在每一个方法中还需要自己声明mysql的$con对象,同时自己关闭 mysql的$con对象.这样,如果查询方法一多,再无缘无故地增加了许多声明$con对象与关闭$con对象的代码.其实完全可以利用php的构造函 数与析构函数给数据库类各个查询方法的注入$con对象,同时自动在每次查询之后自动回收$con

mysql数据库查询之对应库对应表中的注释信息查询以及加字段查询

select * from information_schema.columns where table_schema = 'db' #表所在数据库 and table_name = 'tablename' ; #你要查的表 除了上述方法外还可以加上字段查询 使用mysql -uyourroot -pyourpassword 登录数据库 再使用use database:选中数据库 就可以在mysql查询表中包含有该字段中的行对应的注释信息 其中'WH_BU_ORDER_RELATION'为数据库

mysql 数据库查询与实例。

资料是从教材弄下来的,主要内容是练习实例,在写博文中学习命令行,当然也希望这篇博文能帮助其他人学习mysq数据库命令 SELECT 语句可以从一个或多个表中选取特定的行和列 SELECT                            指定要查询的列名称,列与列之间用逗号隔开. [ALL|DISTINCT]             ALL(默认)显示所有行,包括重复行   |   DISTINCT   消除重复行 [FROM表名[,表名]……]      指定要查询的表,可以指定两个以上的

MySql数据库-查询、插入数据时转义函数的使用

最近在看一部php的基础视频教程,在做案例的时,当通过用户名查询用户信息的时候,先使用了转义函数对客户提交的内容进行过滤之后再交给sql语句进行后续的操作.虽然能看到转义函数本身的作用,但是仍然有一些疑惑. 疑惑一:当转义数据后,数据中会增加一些反斜杠,为了能查找出对应的数据,那么原来存在数据库中的数据是不是也已经被保存成含有反斜杠的了? 疑惑二:转义数据后再向数据库中插入数据,保存在数据库中的数据是否会含有过滤后的反斜杠? 带着这些疑问对用户提交的表单进行测试. echo get_magic_

java下连接mysql数据库 ——查询语句——select

Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件. 你可以下载本站提供的 jar 包:mysql-connector-java-5.1.39-bin.jar 本实例使用的是 Eclipse,导入 jar 包: MySQL 8.0 以上

MySQL 数据库查询练习

-- ---------------------------- -- mysql练习sql脚本 -- ---------------------------- create database db10; -- 创建db10数据库 use db10; -- 切换到db10数据库 create table dept( -- 创建部门表 deptno int primary key, -- 部门编号 deptname varchar(50), -- 部门名称 loc varchar(50) -- 部门

优化MySQL数据库查询

在优化查询中,数据库应用(如MySQL)即意味着对工具的操作与使用.使用索引.使用EXPLAIN分析查询以及调整MySQL的内部配置可达到优化查询的目的. 任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响. 如同其它学科,优化查询性能很大程度上决定于开发者的直觉.幸运的是,像MySQL这样的数据库自带有一些协助工具.本文简要讨论诸多工具之三种:使用索引,使用E

谈谈如何优化MYSQL数据库查询

1.优化数据类型 MySQL中数据类型有多种,如果你是一名DBA,正在按照优化的原则对数据类型进行严格的检查,但开发人员可能会选择他们认为最简单的方案,以加快编码速度,或者选择最明显的选择,因此,你可能面临的都不是最佳的选择,如果可能的话,你应该尝试以通用准则来改变这些决定. (1)避免使用NULL NULL对于大多数数据库都需要特殊处理,MySQL也不例外,它需要更多的代码,更多的检查和特殊的索引逻辑,有些开发人员完全没有意识到,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,