Mysql 递归查询子类Id的所有父类Id

文章目录

  • 问题描述
    • 先看结果
    • 表结构展示
    • 实现递归查询集合
    • 查询结果
    • 修复数据

问题描述

最近开发过程中遇到一个问题,每次添加代理关系都要去递归查询一下它在不在这个代理关系树上.很麻烦也很浪费资源.想着把代理关系的父类全部存起来

先看结果

在这里插入图片描述

表结构展示

表名(t_agent_user_relation)
字段名字段类型描述
current_user_idint当前用户id
superior_user_idint代理用户id
parent_idsvarchar父类Id集合以逗号隔开
parent_idint父类ID
idint主键

实现递归查询集合

因为没有对应函数,需要自行编写递归查询函数

createdefiner = root@`%` function getParentIds(child_id int) returns varchar(255)
BEGINDECLARE parent_id varchar(255) default '';DECLARE parent_ids VARCHAR(1500) default '';DECLARE count int;DECLARE sum int default 0;-- 获取当前子类的父类IDSELECT superior_user_id INTO parent_id FROM t_agent_user_relation WHERE current_user_id = child_id;-- 递归查询所有父类IDWHILE parent_id is not null && sum < 3DOSET parent_ids = CONCAT_WS(',', parent_ids, parent_id);SELECT count(1) into count FROM t_agent_user_relation WHERE current_user_id = parent_id;if count = 0 thenset parent_id = null;elseSELECT superior_user_id INTO parent_id FROM t_agent_user_relation WHERE current_user_id = parent_id;end if;-- 防止出现死循环if parent_id is not null && find_in_set(parent_id, parent_ids) > 0thenset sum = sum + 1;elseset sum = sum;end if;END WHILE;RETURN parent_ids;
END;

如果出现以下错误
[HY000][1418] This function has none of DETERMINISTIC, NO SQL, or READS SQL

执行set global log_bin_trust_function_creators = 1; 错误原因我就不在这里分析了,有兴趣的自己查询一下

查询结果

select  current_user_id,superior_user_id,getParentIds(current_user_id) from t_agent_user_relation

在这里插入图片描述

修复数据

update t_agent_user_relation set    parent_ids=  getParentIds(current_user_id)  where parent_ids is null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/207046.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫教程:selenium常用API用法和浏览器控制

文章目录 selenium apiwebdriver常用APIwebelement常用API 控制浏览器 selenium api selenium新版本(4.8.2)很多函数&#xff0c;包括元素定位、很多API方法均发生变化&#xff0c;本文记录以selenium4.8.2为准。 webdriver常用API 方法描述get(String url)访问目标url地址&…

LINUX入门篇【8】----计算机组成原理以及OS知识的总结

前言&#xff1a; 从而本篇文章开始&#xff0c;我们将进入LINUX的进程篇&#xff0c;但学习进程之前&#xff0c;我们首先需要重新认识我们的计算机&#xff0c;并且正确认识到控制进程的OS&#xff0c;即操作系统是怎样在计算机运行的过程中起到作用的。下面就让我们一同去了…

算法刷题-动态规划2

算法刷题-动态规划2 珠宝的最高价值下降路径最小和 珠宝的最高价值 题目 大佬思路 多开一行使得代码更加的简洁 移动到右侧和下侧 dp[ i ][ j ]有两种情况&#xff1a; 第一种是从上面来的礼物最大价值&#xff1a;dp[ i ][ j ] dp[ i - 1 ][ j ] g[ i ][ j ] 第二种是从左…

xorm源码学习

文章目录 XORM源码浅析及实践ORMORM vs. SQLXORM软件架构 ORM 引擎 Engine——DBM*core.DB Golang&#xff1a;database/sql 源码基本结构连接复用&#xff0c;提高性能。增加数据库连接池数量连接管理 database/sql主要内容&#xff1a;sql.DB创建数据库连接sql.Open()DB.conn…

HTTPS协议的加密流程

目录 一&#xff0c;HTTPS是什么 二&#xff0c;两种加密方式 三&#xff0c;HTTPS的加密过程 3.1 引入对称加密 3.2 引入非对称加密 3.3 引入证书 一&#xff0c;HTTPS是什么 HTTPS也是一个应用层协议&#xff0c;它是在HTTP协议的基础上引入了一个加密层。因为HTTP协议…

《数据仓库入门实践》

前言&#xff1a; 1、问什么要写这篇博客&#xff1f; 随着自己在数仓岗位工作的年限增加&#xff0c;对数仓的理解和认知也在发生着变化 所有用这篇博客来记录工作中用到的知识点与经验 2、这篇博客主要记录了哪些内容&#xff1f; 在日常工作中&#xff0c;发现刚接触不久数仓…

404 - File or directory not found.

iis部署的时候容易出现以下错误&#xff0c;造成的主要原因可能是IIS没有安装好某个组件或插件: 04-找不到文件或目录。 您要查找的资源可能已被删除、名称已更改或暂时不可用。 如果遇到该问题&#xff0c;安装iis的时候记得安装以下

Nginx配置Websocket

WebSocket 和HTTP虽然是不同协议&#xff0c;但是两者“握手”方式兼容。通过HTTP升级机制&#xff0c;使用HTTP的Upgrade和Connection协议头的方式可以将连接从HTTP升级为WebSocket。 Websocket 使用 ws 或 wss 的统一资源标志符&#xff0c;类似于 HTTPS&#xff0c;其中 wss…

智能座舱架构与芯片 - (1) 背景篇

一、软件定义汽车 1.1 什么是软件定义汽车 软件定义汽车(Software Defined Vehicles, SDV)的核心思想是&#xff0c;决定未来汽车的是人工智能为核心的软件技术&#xff0c;而不再是汽车的马力大小&#xff0c;是否真皮座椅&#xff0c;机械性能的好坏。软件定义汽车的终极目…

【深度学习】卷积神经网络(CNN)

一、引子————边界检测 我们来看一个最简单的例子&#xff1a;“边界检测&#xff08;edge detection&#xff09;”&#xff0c;假设我们有这样的一张图片&#xff0c;大小88&#xff1a; 图片中的数字代表该位置的像素值&#xff0c;我们知道&#xff0c;像素值越大&#…

在 vscode 中的json文件写注释,不报错的解决办法

打开 vscode 的「设置」&#xff0c;搜索&#xff1a;files: associations&#xff0c;然后添加 *.json jsonc最后

AIGC ChatGPT4总结SQL优化细节操作

数据库SQL优化是一个复杂的过程,它通常涉及到许多不同的技术和方法。以下是一些常用的SQL优化策略: 1. **索引使用**:索引可以极大地加速查询速度。但是,索引并不总是有好处的,因为它们需要额外的空间来存储,并且在插入和更新数据时可能会减慢速度。因此,选择正确的字段…