数据库左右值法计算问题,请大家指点一下
数据库左右值法计算问题,请大家指点一下 :
下面是一个典型的多层数据结构示意图:

相关创建数据语句:
CREATE TABLE category(
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
parent INT DEFAULT NULL);
INSERT INTO category
VALUES(1,'ELECTRONICS',NULL),(2,'TELEVISIONS',1),(3,'TUBE',2),
(4,'LCD',2),(5,'PLASMA',2),(6,'PORTABLE ELECTRONICS',1),
(7,'MP3 PLAYERS',6),(8,'FLASH',7),
(9,'CD PLAYERS',6),(10,'2 WAY RADIOS',6);
SELECT * FROM category ORDER BY category_id;
在这种数据结构中,各层之间通过字段 parent 来形成邻接表,我们查询某些层级的关系的时候一般都是通过递归的方式,遍历某个层级关系的SQL的查询次数会顺着层级的增加,想想在层级有20的时候,根据某个底层节点取它到顶层节点的查询次数吧。
为了解决这个问题,人们想出了嵌套集模型(The Nested Set Model),请看下图:

上图依然是表现的与图一相同的层级关系,但是却更换了一种表现形式 下面是新的关系表和数据(关系和数据与之前相同,但是表结构不一样):
CREATE TABLE nested_category (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
);
INSERT INTO nested_category
VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4),
(4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),
(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13),
(9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18);
SELECT * FROM nested_category ORDER BY category_id;
这里将 left,right 修改为 lft,rgt因为这两个词在MYSQL中属于关键字 下面我们将插入的数据标识在图上:

同样,我们将数据标识在原来的结构上:

怎么样,是不是很明确了
下面使我自己标定一种形式,方便理解
[1
[2
[3 4]
[5 6]
[7 8]
9]
[10
[11
[12 13]
14]
[15 16]
[17 18]
19]
20]
===========================================================
以上是MySQL 所推荐的左右值法(毗邻目录法、预排序历遍法)
我的想法是根据category的内容,用一个存储过程来计算,把结果算出来放到nested_category中。
请大家指点一下有没有好的方法。
下面是一个典型的多层数据结构示意图:

相关创建数据语句:
CREATE TABLE category(
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
parent INT DEFAULT NULL);
INSERT INTO category
VALUES(1,'ELECTRONICS',NULL),(2,'TELEVISIONS',1),(3,'TUBE',2),
(4,'LCD',2),(5,'PLASMA',2),(6,'PORTABLE ELECTRONICS',1),
(7,'MP3 PLAYERS',6),(8,'FLASH',7),
(9,'CD PLAYERS',6),(10,'2 WAY RADIOS',6);
SELECT * FROM category ORDER BY category_id;
在这种数据结构中,各层之间通过字段 parent 来形成邻接表,我们查询某些层级的关系的时候一般都是通过递归的方式,遍历某个层级关系的SQL的查询次数会顺着层级的增加,想想在层级有20的时候,根据某个底层节点取它到顶层节点的查询次数吧。
为了解决这个问题,人们想出了嵌套集模型(The Nested Set Model),请看下图:

上图依然是表现的与图一相同的层级关系,但是却更换了一种表现形式 下面是新的关系表和数据(关系和数据与之前相同,但是表结构不一样):
CREATE TABLE nested_category (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
);
INSERT INTO nested_category
VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4),
(4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),
(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13),
(9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18);
SELECT * FROM nested_category ORDER BY category_id;
这里将 left,right 修改为 lft,rgt因为这两个词在MYSQL中属于关键字 下面我们将插入的数据标识在图上:

同样,我们将数据标识在原来的结构上:

怎么样,是不是很明确了
下面使我自己标定一种形式,方便理解
[1
[2
[3 4]
[5 6]
[7 8]
9]
[10
[11
[12 13]
14]
[15 16]
[17 18]
19]
20]
===========================================================
以上是MySQL 所推荐的左右值法(毗邻目录法、预排序历遍法)
我的想法是根据category的内容,用一个存储过程来计算,把结果算出来放到nested_category中。
请大家指点一下有没有好的方法。
...全文
相关推荐
PANO_20261029_160547.jpg
jdjjdjd
Special-Comfy-part1.7z.053
ComfyUI专用模型资源分卷压缩包,Special-Comfy-part1系列第053卷。7z分卷格式,单卷900MB,需配合全部分卷解压使用。
Special-Comfy-part1.7z.036
ComfyUI专用模型资源分卷压缩包,Special-Comfy-part1系列第036卷。7z分卷格式,单卷900MB,需配合全部分卷解压使用。
国央企创新负责人如何通过平台实现技术供需的智能匹配与资源协同?.docx
国央企创新负责人如何通过平台实现技术供需的智能匹配与资源协同?
AI 开发同城桶装水配送系统上门订水小程序源码
AI 开发的上门送水 uniapp 小程序模板,包含水品展示、水票购买、订单状态管理、地址管理、邀请好友推广等功能,支持多端发布,方便线下水站二次开发上线运营。 想订水的人可以在电脑或手机的网页里使用,也可以在微信里打开网页使用。 底部有三个主入口:首页、购物车、我的。 先记住三个词,后面会反复用到: 站点:负责给你送水的附近门店。换了地址,可能要换站点。 水票:事先买好的送水券。下单时如果还有剩余,可以直接拿水票抵,不用再付钱。 水贝:平台里的余额,可以当钱用。购物车和付款时都能看到还剩多少。 押桶:桶装水的空桶要先交押金。送水时一般是空桶换满桶,押桶数量不够就不能下这类需要压桶的水。


