mysql树型结构查询父类函数,mysql递归查询父类函数
================================
©Copyright 蕃薯耀 2022-10-10
一、MySQL 中创建函数时出现错误的解决方法
此步可跳过不看,有错再回头看。
--1、在 MySQL 数据库中执行以下语句,临时生效,重启后失效 set global log_bin_trust_function_creators=TRUE; --2、在配置文件 my.ini 的 [mysqld] 配置,永久生效 log_bin_trust_function_creators=1
二、Mysql树型结构查询父节点
--删除函数
--drop function getSwmsGoodsType;
DELIMITER //
CREATE FUNCTION getSwmsGoodsType(rootId VARCHAR(20))
RETURNS VARCHAR (1000)
BEGIN
DECLARE fid VARCHAR(100) DEFAULT ;
DECLARE concat_str VARCHAR(1000) DEFAULT rootId; -- 节点ID(临时变量)
WHILE rootId IS NOT NULL DO
#修改点:parentI为父类ID,swms_goods_type为表名
SET fid =(SELECT parentId FROM swms_goods_type WHERE id = rootId);
IF fid IS NOT NULL THEN
SET concat_str = CONCAT(concat_str, ,, fid);
SET rootId = fid;
ELSE
SET rootId = fid;
END IF;
END WHILE;
RETURN concat_str;
END //
DELIMITER ;
三、Mysql获取树型结构最上层(顶层)父节点
--获取最上层父节点
DELIMITER //
CREATE FUNCTION getSwmsGoodsTypeTop(node_id BIGINT)
RETURNS BIGINT
BEGIN
DECLARE pid BIGINT DEFAULT NULL;
DECLARE top_parent_id BIGINT DEFAULT node_id; -- 节点ID(临时变量)
WHILE node_id IS NOT NULL DO
#修改点:parentI为父类ID,swms_goods_type为表名
SET pid =(SELECT parentId FROM swms_goods_type WHERE id = node_id);
IF pid IS NOT NULL THEN
SET node_id = pid;
SET top_parent_id = pid;
ELSE
SET node_id = pid;
END IF;
END WHILE;
RETURN top_parent_id;
END //
DELIMITER ;
四、使用示例
-- 根据函数查询父节点 6为要查询的哪个子节点id SELECT getSwmsGoodsType(18) id; SELECT * FROM swms_goods_type WHERE FIND_IN_SET(id, getSwmsGoodsType(18)); --查询最上层的父节点 SELECT getSwmsGoodsTypeTop(18) tpid; SELECT * FROM swms_goods_type WHERE FIND_IN_SET(id, getSwmsGoodsTypeTop(18));
================================
©Copyright 蕃薯耀 2022-10-10
