`

mysql 根据父查所有儿子,根据儿子查最上层的父

阅读更多
oracle可以使用connect by prior,进行父子查询,而mysql没有这种功能,需要自己写过程。
注意:pi_orgId 是条件值;pi_isQueryChild: 是查父还是查子,true 是查所有的儿子,false查最上层的父亲;pi_columNam是列明  ,pi_parentColumName 是父列名,pi_tableName 是表名。
代码示例如下:

DELIMITER $$



USE `ivbs`$$



DROP PROCEDURE IF EXISTS `sp_recursive_query`$$



CREATE DEFINER=`root`@`%` PROCEDURE `sp_recursive_query`(IN  pi_orgId VARCHAR(300),IN pi_isQueryChild  BOOLEAN ,IN pi_columNam VARCHAR(50),IN pi_parentColumName VARCHAR(50) ,IN pi_tableName VARCHAR(50), OUT pi_out_str VARCHAR(1000))
BEGIN
    DECLARE sTemp VARCHAR (4000) ;
    SET sTemp = '$' ;
    SET @sTempChd  = CAST(pi_orgId AS CHAR) ;
    WHILE
    @sTempChd IS NOT NULL DO SET sTemp = CONCAT(sTemp, ',', @sTempChd ) ;
    IF pi_isQueryChild THEN
        -- 找儿子
          SET @V_SQL := CONCAT('SELECT  GROUP_CONCAT(',pi_columNam,') INTO @sTempChd  FROM test_myt WHERE FIND_IN_SET(' , pi_parentColumName,',\'',@sTempChd,'\') > 0') ;
         PREPARE stmt FROM @V_SQL;
          EXECUTE stmt  ;
         DEALLOCATE PREPARE  stmt;  
      ELSE
        -- 找父亲
         SET @V_SQL := CONCAT('SELECT  GROUP_CONCAT(',pi_parentColumName,') INTO @sTempChd  FROM test_myt WHERE FIND_IN_SET(' , pi_columNam,',\'',@sTempChd,'\') > 0');
         PREPARE stmt FROM @V_SQL;
         EXECUTE stmt;
         DEALLOCATE PREPARE  stmt;  
     END  IF;
  END WHILE ;
  SET  pi_out_str=sTemp;
END$$



DELIMITER ;

调用:
CALL  sp_recursive_query('1',TRUE,'org_id','org_parent_id','table_name',@result);
SELECT @result;

结果:$,1,6,7,100,11,12 (通过1,找到所有的儿子,这是结果的格式,找父亲,第二个参数就传false,其他一样)
分享到:
评论

相关推荐

    根据子节点查找所有父节点

    在IT领域,尤其是在软件开发中,经常会遇到需要根据某个子节点查找其所有父节点的情况。这通常发生在数据结构和树形结构的操作中,比如在文件系统、DOM(文档对象模型)解析、数据库关系模型或者图算法中。这篇博客...

    Mysql 查询根节点下所有叶子节点

    1、SELECT * FROM ( SELECT d.id, ( SELECT count( 1 ) FROM t_tree dd WHERE dd.parent_uuid = d.id ) AS count FROM t_tree d ) a ... t3.id NOT IN ( SELECT t1.id FROM t_tree t1, t_tree t2 WHERE ...

    mysql 增删改查

    C# VS2012 86系统 mysql-5.5.27-win32 功能:利用动软代码生成器 从 数据库表或者视图中生成 的三层结构代码 实现 数据增删改查。 如果可以,请下载资源中 修改 的动软代码生成器 C#模板生成 1、由于之前使用 动...

    mysql对省市县的查询.sql

    mysql对省市县的查询

    MySQL通过自定义函数实现递归查询父级ID或者子级ID

    在MySQL中,递归查询通常用于处理层次结构的数据,如组织结构、菜单系统或类别树等。当数据的层级关系无法预知或者可能无限深时,传统的JOIN操作可能无法满足需求,此时就需要自定义函数来实现递归查询。本文将详细...

    mysql多表查询

    主要记录描述了mysql数据中的多表查询问题,以及问题的解决办法

    MySQL查询优化技术_索引.pdf

    MySQL查询优化技术_索引

    Mysql树形递归查询的实现方法

    在MySQL中处理这类数据时,可能会遇到需要查询某节点的所有子节点或父节点的情况。由于MySQL不直接支持像Oracle那样使用`START WITH ... CONNECT BY`的递归查询语法,我们需要采取其他策略来实现类似的功能。 在...

    C++、MFC连接MYSQL实现增删改查

    在本文中,我们将深入探讨如何使用C++和MFC(Microsoft Foundation Classes)通过ADO(ActiveX Data Objects)连接到MYSQL数据库以实现基本的增、删、改、查操作。这是一套实用的技术方案,适用于那些希望在C++环境...

    mysql查询分析器

    MySQL查询分析器是一种强大的工具,专门用于帮助数据库管理员和开发人员高效地管理和操作MySQL数据库。SQLYog Enterprise绿色版是其中的一款,它提供了一个直观且功能丰富的界面,使得执行SQL查询、管理数据库对象...

    node.js+express+mysql实现增删改查+分页+文件上传

    在本文中,我们将深入探讨如何使用Node.js、Express框架和MySQL数据库来构建一个功能完备的Web应用程序,包括数据的增删改查(CRUD)操作、分页功能以及图片的上传处理。首先,我们先来了解这三个核心组件。 **Node...

    QT连接MySQL实现增删改查分页

    QT版本5.14,实现了连接MySQL进行了增删改查操作,和分页操作。解决了中文SQL提示成功但是执行失败问题。博客地址:https://blog.csdn.net/qq_37529913?spm=1001.2101.3001.5113

    mysql查询一天,查询一周,查询一个月的数据.txt

    mysql查询一天,查询一周,查询一个月的数据.txt

    mySQL查询分析器

    mySQL查询分析器 j简单的JDS小程序,学习程序!

    MySQL递归查询树状表的子节点、父节点具体实现

    它使用`sParentTemp`存储当前遍历到的父节点ID,而`sParentList`积累所有父节点ID的字符串。开始时,`sParentTemp`被初始化为根节点ID。循环过程中,它查找那些ID存在于`sParentTemp`中的记录,将这些记录的`...

    Rust – mysql 增删改查

    一、添加mysql依赖 mysql_async 是基于tokio2.0的异步mysql [dependencies] mysql_async = "0.22.2" tokio = "0.2.13" 二、设置database_url,创建连接池 DSN:mysql://root:root@127.0.0.1:3306/testdb?pool_min=...

    简单的jsp+mysql实现数据库的增删改查

    综上所述,"简单的jsp+mysql实现数据库的增删改查"项目涵盖了Web开发的基本流程,包括用户交互、服务器处理、数据库操作以及权限控制。这样的实践有助于开发者理解Web应用的工作原理,同时为更复杂的系统开发打下...

    WPF+MySQL 实现学生信息的增删改查

    在本文中,我们将深入探讨如何使用Windows Presentation Foundation(WPF)和MySQL数据库来实现学生信息管理系统的增删改查功能。这是一个常见的应用场景,对于初学者和开发者来说都是一个很好的实践项目。 首先,...

    SqlSugar操作mysql增删改查c#代码

    SqlSugar操作mysql数据库增删改查代码 解压密码:打开文章链接: https://blog.csdn.net/txwtech/article/details/125603295?spm=1001.2014.3001.5501

Global site tag (gtag.js) - Google Analytics