海露-XShell.CN

向下查询(根据父级查询子级)
1
select * from tb_base_region WHERE FIND_IN_SET(region_code,getRegionCodeListForDown('01'));
向上查询(根据子级查询父级)
1
select * from tb_base_region WHERE FIND_IN_SET(region_code,getRegionCodeListForUp('010101'));
创建向下查询的存储函数,查询出符合要求的数据的region_code集合,以逗号拼接成字符串。
1
2
3
4
5
6
7
8
9
10
11
12
CREATE DEFINER=`skip-grants user`@`skip-grants host` FUNCTION `getRegionCodeListForDown`(upCode VARCHAR(10)) RETURNS varchar(4096) CHARSET utf8
BEGIN
DECLARE returnCodeList VARCHAR(4096);
DECLARE selectCode VARCHAR(4096);
SET returnCodeList = '';
SET selectCode = upCode;
WHILE selectCode IS NOT NULL DO
SET returnCodeList = CONCAT(returnCodeList,',',selectCode);
select GROUP_CONCAT(region_code) INTO selectCode FROM tb_base_region WHERE FIND_IN_SET(parent_code,selectCode) > 0;
END WHILE;
RETURN returnCodeList;
END;
创建向上查询的存储函数,查询出符合要求的数据的region_code集合。
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE  DEFINER=`skip-grants user`@`skip-grants host` FUNCTION `getRegionCodeListForUp`(downCode VARCHAR(10)) RETURNS varchar(4096) CHARSET utf8
BEGIN
DECLARE returnCodeList VARCHAR(4096);
DECLARE selectCode VARCHAR(4096);
SET returnCodeList = '';
SET selectCode = downCode;
-- WHILE selectCode IS NOT NULL DO -- 判断条件视情况而定
WHILE selectCode > 0 AND downId in (select downCode from tb_base_region) DO
SET returnCodeList = CONCAT(returnCodeList,',',selectCode);
SELECT parent_code into selectCode from tb_base_region WHERE region_code = selectCode;
END WHILE;
RETURN returnCodeList;
END;

如果对您有帮助,请作者喝杯LK:

 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 , 总访问量为 次 。
字数统计:14.4k 载入天数...载入时分秒...