【进阶之定义函数】一个查询树结构数据的集合

原创
2019/10/17 10:59
阅读数 52

1、基本定义

delimiter 自定义符号  -- 如果函数体只有一条语句, begin和end可以省略, 同时delimiter也可以省略

create function 函数名(形参列表) returns 返回类型  -- 注意是retruns

  begin

    函数体    -- 函数内定义的变量如:set @x = 1; 变量x为全局变量,在函数外面也可以使用

    返回值

  end

自定义符号
delimiter ;

示例:

-- 自定义函数
delimiter $$
create function myfun3(ia int, ib int) returns int
begin
    return ia + ib;
end
$$
delimiter ;

2、需求

     2.1 统计文章分类的数量,分类是树形结构,所以有一个先查询分类树形的级别的集合。使用的函数包括FIND_IN_SET

3、实例

DELIMITER $$

USE `hk`$$

DROP FUNCTION IF EXISTS `queryChildren`$$

CREATE DEFINER=`root`@`192.168.2.%` FUNCTION `queryChildren`(tId VARCHAR(4000)) RETURNS VARCHAR(4000) CHARSET utf8
BEGIN
	DECLARE sTemp VARCHAR(4000) DEFAULT '$';
	DECLARE sTempChd VARCHAR(4000) DEFAULT tId;
	
	WHILE sTempChd IS NOT NULL DO
	
	SET sTemp= CONCAT(sTemp,',',sTempChd);
	SELECT GROUP_CONCAT(id) INTO sTempChd FROM hk_filetype WHERE FIND_IN_SET(parentFileTypeId,sTempChd)>0;
	END WHILE;
	
	RETURN sTemp;
    END$$

DELIMITER ;

4、在程序中的使用

<resultMap id="BaseResultMap" type="com.test.model.HkFiletype">
        <id column="ID" jdbcType="VARCHAR" property="id"/>
        <result column="HOSPITALCODE" jdbcType="VARCHAR" property="hospitalcode"/>
        <result column="FILETYPENAME" jdbcType="VARCHAR" property="filetypename"/>
        <result column="PARENTFILETYPEID" jdbcType="VARCHAR" property="parentfiletypeid"/>
        <result column="sorting" jdbcType="INTEGER" property="sorting"/>
        <result column="ISSO" jdbcType="INTEGER" property="isso"/>
        <result column="CONFIRMDATE" jdbcType="TIMESTAMP" property="confirmdate"/>
        <result column="USEREDITFLAG" jdbcType="INTEGER" property="usereditflag"/>
        <association property="totals" javaType="integer" column="id" select="selectTotales">
        </association>
    </resultMap>
 <select id="selectTotales" parameterType="string" resultType="integer">
        SELECT
          COUNT(1) AS totals
        FROM
          hk_file hkf
        WHERE FIND_IN_SET(hkf.`annexTypeCode`,
          (SELECT
            queryChildren (
              #{id}
            )) )
    </select>

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部