我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们无法控制树的深度。这时就需要在MySQL中用存储过程来实现或在你的程序中来实现这个递归。本文讨论一下几种实现的方法。 样例数据: mysql> create tab...
--drop FUNCTION `getParentList` CREATE FUNCTION `getParentList`(rootId varchar(100)) RETURNS varchar(1000) BEGIN DECLARE fid varchar(100) default ‘‘; DECLARE str varchar(1000) default rootId; WHILE rootId is not null do SET fid =(SELECT parentid FROM treeNodes WHERE id = rootId); IF fid is not null THEN SET str = concat(str, ‘,‘, fid); SET rootId = fid; ELSE SET ro...
declare lev int; -- 查询父级set lev=1;drop table if exists tmp1; CREATE TABLE tmp1(ID VARCHAR(40),Wl_Code varchar(50),ParentCode varchar(40) ,levv INT);-- 用拼接的方式拼接表名和参数SET @sqlcmd = CONCAT(‘INSERT tmp1 SELECT ID,Wl_Code,ParentCode,1 FROM ‘,tablename ,‘ WHERE Wl_Code=‘,wlcode);-- 声明PREPARE stmt FROM @sqlcmd; -- 执行SQLEXECUTE stmt; -- DEALLOCATE PREPARE stmt; -- SELECT ROW_C...
mysql中递归查询的实现标签:operator keyword mysql pid char like log div 查看 本文系统来源:https://www.cnblogs.com/chenhuan821361335/p/8203534.html
1 0 根节点2 1 一级节点3 1 一级节点4 1 一级节点5 3 二级节点6 4 二级节点7 2 二级节点8 5 三级节点9 5 三级节点10 5 三级节点11 6 三级节点12 11 四级节点13 10 四级节点 查询id为1的节点的子节点id拼接串:...
table treeNodes(id int primary key,nodename varchar(20),pid int );select * from treeNodes; +----+----------+------+ | id | nodename | pid | +----+----------+------+ | 1 | A | 0 | | 2 | B | 1 | | 3 | C | 1 | | 4 | D | 2 | | 5 | E | 2 | | 6 | F | 3 | | 7 | G | 6 | | 8 | H | 0 | | 9 | I | 8 | | 10 | J...
DEFINER=`root`@`%` FUNCTION `getChildList`(rootId INT) RETURNS text CHARSET utf8 BEGIN DECLARE sTemp text; DECLARE sTempChd text; SET sTemp = ‘$‘; SET sTempChd =cast(rootId as CHAR); WHILE sTempChd is not null DO SET sTemp = concat(sTemp,‘,‘,sTempChd); SELECT group_concat(id) INTO sTempChd FROM sys_company where FIND_IN_SET(parent_id,sTempChd)>0; END WHILE; RETURN sTemp; END通常 group_concat 有...
用mysql存储过程代替递归查询 查询此表某个id=4028ab535e370cd7015e37835f52014b(公司1)下的所有数据 正常情况下,我们采用递归算法查询,如下1 2 3 4 5 6 7 8 9 10 11 12 13 14 15public void findCorpcompanyListByParentId(List<UapcompanyVo> vos,String parentId){ UapcompanyParam param = new UapcompanyParam(); param.setParentid(parentId); List<Uapcompany> companyList = uapcompanyDao.fi...
帮你循环调用函数,如果函数返回false,那么就过滤掉这个值,是指从你传入这个list里面过滤4、max()求最大值5、sum()求和6、round:保留几位小数7、chr:把数字转成对应的ascii码表里对应的值8、ord:把字母转成对应的ascii码表里对应的数字9、dir:查看某个对象里有哪些方法10、bool:布尔类型的,返回TRUE false11、eval()执行一些简单的Python代码,运算、定义变量12、exec#执行一些复杂的代码,exec函数没有返回值就是none 13、zi...
CREATE FUNCTION findOrgan//5(areaId VARCHAR(255)//1) RETURNS VARCHAR(4000) BEGIN DECLARE sTemp VARCHAR(4000); DECLARE sTempChd VARCHAR(4000);SET sTemp=‘$‘; SET sTempChd = CAST(areaId AS CHAR);WHILE sTempChd IS NOT NULL DO SET sTemp= CONCAT(sTemp,‘,‘,sTempChd); SELECT GROUP_CONCAT(OR_ID)//2 INTO sTempChd FROM sys_organ//3 WHERE FIND_IN_SET(PARENT_ID//4,sTempChd)>0; END WHILE; RETURN sTemp; END;...
GROUP_CONCAT(‘‘‘‘, pk_dept , ‘‘‘‘) FROM rzzxdb.bi_dept WHERE FIND_IN_SET(fr_pk_dept,‘1070‘)>0; 设置某个部门下的所有子部门为无效:update bi_dept set zt =‘0‘ WHERE FIND_IN_SET(fr_pk_dept,‘部门ID‘)>0;二、自定义递归函数 利用find_in_set()函数和group_concat()函数实现递归查询:、 1、向下递归: 调用方式:SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfo(4));实例:DROP FUN...
INSERT INTO `t_areainfo` VALUES (‘1‘, ‘0‘, ‘中国‘, ‘0‘, ‘0‘); INSERT INTO `t_areainfo` VALUES (‘2‘, ‘0‘, ‘华北区‘, ‘1‘, ‘0‘); INSERT INTO `t_areainfo` VALUES (‘3‘, ‘0‘, ‘华南区‘, ‘1‘, ‘0‘); INSERT INTO `t_areainfo` VALUES (‘4‘, ‘0‘, ‘北京‘, ‘2‘, ‘0‘); INSERT INTO `t_areainfo` VALUES (‘5‘, ‘0‘, ‘海淀区‘, ‘4‘, ‘0‘); INSERT INTO `t_areainfo` VALUES (‘...
查询 id = 6 的所有父级 SELECT ID.level, DATA.* FROM( SELECT @id as _id, ( SELECT @id := parent_id FROM table1 WHERE id = @id ) as _pid, @l := @l+1 as level FROM table1, (SELECT @id := 6, @l := 0 ) b WHERE @id > 0 ) ID, table1 DATA WHERE ID._id = DATA.id ORDER BY level;根据这个父级查询方法,很容易可以写出查所有子级的,下面的查询 id=3 的所有子级 SELECT ID.level, DATA.* FRO...
one = cur.fetchone()#fetchone()函数它的返回值是单个的元组,也就是一行记录,如果没有结果,那就会返回Nonemany = cur.fetchmany()#获取指定数量结果fetmany(x)all = cur.fetchall()#fetchall()函数,它的返回值是多个元组,即返回多个行记录,如果没有结果,返回的是()cur.close()#关游标conn.close()#关连接print(one)print(many)print(all) 知识点五、redis 操作 1、字符串操作 import redis#关系型数据库#mysql oracle sqlser...
喜欢就点个赞呗! 源码<--请点击此处查看引入 当我看到一些评论时,例如下面的样子。我挺好奇这个功能是怎么样做出来的。进过查阅资料,发现这其实是 MySQL 的递归操作。下面就让我操作一下怎么实现 MySQL 的递归查询。设计数据库 观察这种数据库设计,你会发现他都有一个父节点,一直到根节点,所以我们设计数据库的时候,应该设置一个 parentid 字段。所以,我们可以得到以下的数据库。sql 脚本如下 CREATE TABLE digui(id INT(11...