内容简介:如何用 SQL 中的循环查询无限级分类的所有子类
表结构
infinite.region
| id | parent_id | name |
|---|---|---|
| 1 | 0 | 亚洲 |
| 2 | 0 | 北美洲 |
| 3 | 1 | 中国 |
| 4 | 1 | 日本 |
| 5 | 2 | 美国 |
| 6 | 1 | 韩国 |
| 7 | 3 | 北京 |
| 8 | 3 | 成都 |
定义一个 function
delimiter //
DROP FUNCTION IF EXISTS `getAllChdID`;
CREATE FUNCTION `getAllChdID`(parentID INT)
RETURNS varchar(255)
BEGIN
DECLARE allChdIdList VARCHAR ( 255 );
DECLARE curChdIdList VARCHAR ( 255 );
# 存储所有子类
SET allChdIdList = '$';
# 存储当前类的子类
SET curChdIdList = cast( parentID AS CHAR );
WHILE curChdIdList IS NOT NULL DO
# 将当前类的子类添加到所有子类尾部
SET allChdIdList = concat( allChdIdList, ',', curChdIdList );
# 查询当前子类的所有子类并覆盖掉当前子类
SELECT
group_concat( id ) INTO curChdIdList
FROM
infinite.region
WHERE
FIND_IN_SET( parent_id, curChdIdList ) > 0;
END WHILE;
RETURN allChdIdList;
END
//
delimiter ;
运行一下
说明
- concat:将两个字符串通过
,连接 - group_concat:将
ID字段的值进行连接 - FIND_IN_SET:返回
parent_id在curChdIdList字符串中的位置
应用一下下
infinite.users
| id | region_id | name |
|---|---|---|
| 1 | 3 | 小明 |
| 2 | 3 | 小红 |
| 3 | 3 | 小张 |
| 4 | 4 | 老王 |
| 5 | 4 | 老张 |
| 6 | 4 | 小黑 |
| 7 | 5 | 大黄 |
| 8 | 7 | 大虾 |
| 9 | 8 | 零七 |
| 10 | 8 | 天空 |
| 11 | 8 | 玛丽 |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- python – 如何子类化大pandasDataFrame?
- 父类返回子类类型的函数写法
- 从python中的父类文件调用子类方法
- golang 父类调用子类方法、继承多态的实现方式
- ios – 在哪里为子类的uitableviewcell创建自动布局约束?
- C#中子类对基类方法的继承、重写和隐藏
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
并行计算导论
Ananth Grama、George Karypis、张武、毛国勇、Anshul Gupta、Vipin Kumar、程海英 / 张武、毛国勇、程海英 / 机械工业出版社 / 2005-1-1 / 49.00元
《并行计算导论》(原书第2版)全面介绍并行计算的各个方面,包括体系结构、编程范例、算法与应用和标准等,涉及并行计算的新技术,也覆盖了较传统的算法,如排序、搜索、图和动态编程等。《并行计算导论》(原书第2版)尽可能采用与底层平台无关的体系结构并且针对抽象模型来设计处落地。书中选择MPI、POSIX线程和OpenMP作为编程模型,并在不同例子中反映了并行计算的不断变化的应用组合。一起来看看 《并行计算导论》 这本书的介绍吧!