首页 > 数据库 >mysql树型结构查询父类函数,mysql递归查询父类函数

mysql树型结构查询父类函数,mysql递归查询父类函数

时间:2022-10-10 15:34:03浏览次数:49  
标签:SET -- 查询 fid mysql 节点 父类 id SELECT

 

================================

©Copyright 蕃薯耀 2022-10-10

https://www.cnblogs.com/fanshuyao/

 

一、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

https://www.cnblogs.com/fanshuyao/

标签:SET,--,查询,fid,mysql,节点,父类,id,SELECT
From: https://www.cnblogs.com/fanshuyao/p/16775898.html

相关文章

  • MySQL中常见的约束(Constraints)
    0.约束的概念SQL约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止。1.主键约束PRIMARYKEY约束唯一标识数据库表中的每条记录。要求必须包含唯......
  • mysql8.0 用户授权
    createuser'user-xxx'@'%'identifiedby'passworddddd';grantallprivilegeson*.*to'user-xxx'@'%'withgrantoption;ALTERUSER'user-xxx'@'localhost'ID......
  • MySQL练习题
    1,取得每个部门最高薪水的人员名称:1,先按照部门分组并求出每个部门的最大值,以及获取最大值的部门编号。作为临时表2,通过joinon连接两个表,使用子表中的部门编号和......
  • idea连接mysql数据库报错
      原因:版本的问题我安装的mysql版本高,但是驱动的版本低,所以就不行了,那就换个版本,我用了最新的版本,好了   ......
  • mysql 5.1.73 binlog测试以及全量备份恢复测试
       甲方提出业务服务器的mysql日志要本地备份或者上传日志服务器,以及要具备回滚、恢复功能。问了度娘后,同甲方商量、建议,保存binlog日志30天且每月全量备份一次。 ......
  • 38、mysql数据库(pymysql及事务)
    38.1、python之pymysql模块:1、说明:pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同。2、模块安装:pipinstallpymysql3、在pycharm中添加pymysql模块:File......
  • 36、mysql数据库(dml)
    36.1、表记录的增删改:1、增加表记录:insert[into]tab_name(field1,filed2,.......)values(value1,value2,.......);(1)创建一张表:createtableemployee_new(idintprimaryk......
  • 34、mysql数据库(介绍)
    34.1、什么是数据库:数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性......
  • 35、mysql数据库(ddl)
    35.1、数据库之库操作:1、创建数据库(在磁盘上创建一个对应的文件夹):createdatabase[ifnotexists]db_name[charactersetxxx];2、查看数据库:showdatabases;#查看所有数......
  • mysql 语句执行顺序
    mysql语句执行顺序fromjoinonwheregroupbyhavingselectorderbylimit解释from:表连接leftjoinon:表连接,并筛选(左表全有,右表符合条件有)where:连接后筛选......