• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 7年前 (2018-06-07) 510次浏览 已收录 0个评论

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,其他一样)

欢迎大家阅读《mysql 依据父查所有儿子,根据儿子查最上层的父_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql 依据父查所有儿子,根据儿子查最上层的父_mysql

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址