最近在做开发一块业务,碰到了一些棘手的问题,A表的字符串集数据要被B表里的C表包含A表数据并进行分页,大致意思就是 多对多的数据并且是包含才查询出来,让我着实在头大。
判断一个字符串集在包含另一个字符串集
比如一个A集合是这样的
1,4,8
B集合
1,2,3,8,4
那么需求就是判断A集合是否被B集合包含,直接贴上函数
CREATE DEFINER=`root`@`%` FUNCTION `find_str_in_set`(strA VARCHAR(500),strB VARCHAR(5000)) RETURNS tinyint(1)
BEGIN
DECLARE one_str VARCHAR(100);
DECLARE result BOOLEAN DEFAULT TRUE;
DECLARE Done INT DEFAULT 0;
DECLARE first_strs CURSOR FOR SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(strA,',',m.help_topic_id+1),',',-1) AS one_str
FROM mysql.`help_topic` m WHERE m.help_topic_id < (LENGTH(strA) - LENGTH(REPLACE(strA,',',''))+1);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET Done =1;
IF(strA = '' OR strA IS NULL ) THEN RETURN TRUE; END IF;
IF(strB IS NULL ) THEN RETURN FALSE; END IF ;
IF(strA != '' AND strA IS NOT NULL AND strB != '' AND strB IS NOT NULL)THEN
OPEN first_strs;
flag_loop:LOOP
FETCH first_strs INTO one_str;
IF Done =1 THEN LEAVE flag_loop ; END IF ;
IF NOT FIND_IN_SET(one_str,strB) THEN SET result = FALSE;END IF;
END LOOP flag_loop;
CLOSE first_strs;
END IF;
RETURN result;
END
执行完上面代码接着就可以调用方法
SELECT find_str_in_set(‘1,4,8′,’1,2,3,8,4’) FROM DUAL;1
×用微信扫描并分享