MySQL树递归查询
MySQL树形查询
Oracle的Start with…Connect By可以实现树的递归查询,mysql与Oracle不同,没有prior关键字,mysql需要自己写函数或存储过程来实现树的递归查询。
数据库表
DROP TABLE IF EXISTS category
;
CREATE TABLE category
(
categoryId
int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘商品类目id’,
categoryName
varchar(64) NOT NULL COMMENT ‘商品类目名称’,
parentId
int(10) unsigned DEFAULT NULL COMMENT ‘父级类目id’,
status
enum(‘delete’,‘disabled’,‘enable’) NOT NULL DEFAULT ‘enable’ COMMENT ‘enabe-可用;disabled-不可用;delete-删除’,
PRIMARY KEY (categoryId
),
KEY parentId
(parentId
),
CONSTRAINT category_ibfk_1
FOREIGN KEY (parentId
) REFERENCES category
(categoryId
) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=888889 DEFAULT CHARSET=utf8;
– Records of category
INSERT INTO category
VALUES (‘59’, ‘食品生鲜’, null, ‘enable’);
INSERT INTO category
VALUES (‘75’, ‘茗茶’, ‘59’, ‘enable’);
INSERT INTO category
VALUES (‘76’, ‘美妆个护’, null, ‘enable’);
INSERT INTO category
VALUES (‘77’, ‘洗发护发’, ‘76’, ‘enable’);
INSERT INTO category
VALUES (‘79’, ‘面膜’, ‘78’, ‘enable’);
INSERT INTO category
VALUES (‘81’, ‘沐浴’, ‘82’, ‘enable’);
INSERT INTO category
VALUES (‘82’, ‘身体护理’, ‘76’, ‘enable’);
INSERT INTO category
VALUES (‘83’, ‘颈部’, ‘82’, ‘enable’);
INSERT INTO category
VALUES (‘84’, ‘手足护品’, ‘82’, ‘enable’);
INSERT INTO category
VALUES (‘87’, ‘牙膏/牙粉’, ‘80’, ‘enable’);
INSERT INTO category
VALUES (‘90’, ‘香水彩妆’, ‘76’, ‘enable’);
INSERT INTO category
VALUES (‘91’, ‘底妆’, ‘90’, ‘enable’);
INSERT INTO category
VALUES (‘92’, ‘腮红’, ‘90’, ‘enable’);
INSERT INTO category
VALUES (‘100’, ‘洗发’, ‘77’, ‘enable’);
INSERT INTO category
VALUES (‘101’, ‘护发’, ‘77’, ‘enable’);
1. 根据分类ID查询包含该分类在内的所有父类ID
BEGIN
DECLARE sTemp VARCHAR(100);
DECLARE flag int(8);
SET sTemp='$';
SELECT count(1) INTO flag FROM category WHERE categoryId=cId;
IF flag = 1 then
WHILE cId IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',cId);
SELECT parentId INTO cId FROM category WHERE categoryId=cId;
END WHILE;
END IF;
RETURN sTemp;
END
2. 根据分类ID查询包含该分类在内的所有子类ID
CREATE FUNCTION getRecommendChildList(cId INT)
//cId为你要查询的节点。
RETURNS VARCHAR(1000)
BEGIN
DECLARE sTemp VARCHAR(100);
DECLARE flag int(8);
SET sTemp='$';
SELECT count(1) INTO flag FROM category WHERE categoryId=cId;
IF flag = 1 then
WHILE cId IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',cId);
SELECT parentId INTO cId FROM category WHERE categoryId=cId;
END WHILE;
END IF;
RETURN sTemp;
END
- ELK 集群 Kibana 使用 X-Pack 权限控制,监控集群状态,实时的生成,警报,监视,cpu,内存,磁盘空间,等等一系列,报告和的可视化图形
- Dubbo详细介绍与安装使用过程
- 基础篇章:关于 React Native之 ActivityIndicator 组件的讲解
- 基础篇章:关于 React Native 之 KeyboardAvoidingView 组件的讲解
- 基础篇章:关于 React Native 之 Slider 组件的讲解
- Java9 中的 9 个新特性
- ELK 集群 + X-Pack + Redis 集群 + Nginx ,实时日志(数据)搜集和分析的监控系统,简单上手使用
- 基础篇章:关于 React Native 之 Modal 组件的讲解
- 搭建高吞吐量 Kafka 分布式发布订阅消息 集群
- 你真的会用Retrofit2吗?Retrofit2完全教程
- 线程管理之获取和设置线程信息
- 线程创建和运行
- CentOs7.3 安装 MySQL 5.7.19 二进制版本
- Retrofit2.0通俗易懂的学习姿势,Retrofit2.0 + OkHttp3 + Gson + RxJava
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- EXTJS grid.column.renderer绑定失效
- Head First设计模式——装饰者模式
- spring security oauth2 资源服务器WebAsyncTask/DeferredResult接口调用报错InsufficientAuthenticationException
- Head First设计模式——简单工厂、工厂、抽象工厂
- Golang | 简介channel常见用法,完成goroutin通信
- Head First设计模式——单例模式
- 【日拱一卒】链表——两个有序的链表合并
- Head First设计模式——命令模式
- Flask表单之WTForms和flask-wtf
- Head First设计模式——适配器和外观模式
- 「2020最新」Spring最易学习教程 4—整合Mybatis 事务控制
- Head First设计模式——模板方法模式
- Head First设计模式——迭代器模式
- PR工具自带的电源网络分析功能靠谱吗?
- flask_admin使用教程