zoukankan      html  css  js  c++  java
  • MySQL自定义函数

    1. 查询所有树状数据的后代节点

    代码中a.centerid 为本身的唯一标示,a.parentcentid为父id标示 比如传入1 ,查出2,3,4,5,6

      1

     2     3

    4     5       6

    drop FUNCTION  if exists queryChildrenCenters;
    create function queryChildrenCenters(centerid VARCHAR(31))
        returns VARCHAR(4000)
    BEGIN
    declare sTemp VARCHAR(4000);
    declare sTempid VARCHAR(4000);
    SET sTemp = '';
    set sTempid = centerid;
        while sTempid is not null DO
            select group_concat(a.centerid) INTO sTempid from sys_center a where find_in_set(a.parentcentid,sTempid) > 0;
            IF (sTempid is NULL ) THEN
                set sTemp = sTemp;
            ELSE
                set sTemp = concat(stemp,',',sTempid);
            END IF;
        END WHILE;
        set sTemp = substring(sTemp,2);
        return sTemp;
    END;

     2.查询所有后代id和名字的存储过程

    CREATE PROCEDURE queryChildrenCenterIdAndName(IN centerid VARCHAR(31))
      BEGIN
    declare sTemp VARCHAR(4000);
    declare sTempid VARCHAR(4000);
    declare sTempNames VARCHAR(4000);
    declare tempName VARCHAR(4000);
    SET sTemp = '';
    set sTempNames = '';
    set sTempid = centerid;
        while sTempid is not null DO
            select group_concat(a.centerid),group_concat(a.centername) INTO sTempid,tempName from sys_center a where find_in_set(a.parentcentid,sTempid) > 0;
            IF (sTempid is NULL ) THEN
                set sTemp = sTemp;
                set sTempNames = sTempNames;
            ELSE
                set sTemp = concat(stemp,',',sTempid);
                set sTempNames = concat(sTempNames,',',tempName);
            END IF;
        END WHILE;
        set sTemp = substring(sTemp,2);
        set sTempNames = substring(sTempNames,2);
        select sTemp as centerids,sTempNames as centernames;
    END;

    ps: 查询的id还可以,查询出来的名称少了数据,还望大佬指点

    转载: https://www.cnblogs.com/angelasp/p/groupconcat.html

    关于group_concat函数:
    group_concat数据量小的时候没什么问题,但是数据量大的时候就有问题了;
    group_concat:默认可连接的长度是1024;如果已经设置了最大长度,超过这个长度就会被截取至这个长度;
    在查询(select)语句中,使用了group_concat之后,limit就会失效;
    解决方法:
    1、修改MySQL的配置文件windows下my.ini文件:
    #需要设置的长度
    group_concat_max_len = 102400

    以上设置Mysql最大长度设置,

    mysql> show variables like "%concat%"; 命令查了一下,数据量挺长的。

    注意LINUX 设置需要在/etc/my.cnf  且需要设置位置在 需要有管理员权限才可以操作GLOBAL;

    我在存储过程中采用了上面的第三种办法,执行存储过程,OK,完美搞定!

    但是有时候我们在生产环境中最好是使用前面两种,尽量避免线上重启数据库服务解决。

  • 相关阅读:
    PHP中GBK和UTF8乱码解决方案
    Ubuntu下的PHP开发环境架设
    Windows 7 IE主页被篡改,如何修复?
    提高代码质量:如何编写函数
    PhpStorm 10 破解方法
    PHP 常用的header头部定义汇总
    kindle 退出演示模式
    好程序与差程序Good Programming, Bad Programming
    如何让你的一天能有26小时?不完全是开玩笑
    毕业若干年,才知道自己原来认为的很多都是错的想法的成熟
  • 原文地址:https://www.cnblogs.com/yxgmagic/p/9797875.html
Copyright © 2011-2022 走看看