常用的一些函数
FIND_IN_SET(string,StringList)
其中:str 要查询的字符串 strlist 字段名 参数以”,”分隔 如 (1,3,5)
例:
这是表的设计,此时我们要得到某id下面的一个无限级的集合
此时我们先定义一个获取对应id集合的函数
CREATE FUNCTION `getChildList`(rootId INT) RETURNS varchar(1000) CHARSET utf8mb4
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempChd VARCHAR(1000);
SET sTemp = '$';
SET sTempChd =cast(rootId as CHAR);
WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,',',sTempChd);
SELECT group_concat(id) INTO sTempChd FROM app_activity_type where FIND_IN_SET(pid,sTempChd)>0;
END WHILE;
RETURN sTemp;
END
关键字段解读
cast(字段名 as 转换的类型 )
此函数的作用是指定类型字段类型的转变
group_concat(字段名)
此函数的作用是返回指定字段的集合并且以逗号隔开
concat(str1,str2,…)
此函数的作用是将多个函数的值进行拼接
sql关键
SELECT group_concat(id) INTO sTempChd FROM app_activity_type where FIND_IN_SET(pid,sTempChd)>0;
解读:
查询app_activity_type表中pid含有 sTempChd值的id集合,并且以逗号隔开的结构存入sTempChd当中
这里的FIND_IN_SET则是查找集合的作用
整体:
将得到的集合存入sTemp并且继续递归,直到pid中不再含有sTempChd值时,退出循环
由于该函数返回的字符串,所以我们需要字符串中的id拿出来查询出实际的记录
函数运用:
SELECT * FROM app_activity_type WHERE FIND_IN_SET(id,getChildList (1))
以上便是我对函数的一些自我见解。