================================
©Copyright 蕃薯耀 2022-10-10
蕃薯耀的博客_CSDN博客-蕃薯耀分享,java,js领域博主
一、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