多级目录树(森林)的数据库存储结构
浏览量:194
该结构SQL表示如下:
CREATE TABLE node2 (
id INT AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR(12) NOT NULL ,
num INT NOT NULL DEFAULT 0 COMMENT '节点下叶子的数量、节点权重(可认为分类下产品数量)',
p_id INT NOT NULL DEFAULT 0 COMMENT '0表示根节点',
search_key VARCHAR(128) DEFAULT '' COMMENT '用来快速搜索子孙的key,存储根节点到该节点的路径',
level INT DEFAULT 0 COMMENT '层级'
);
重点在于search_key字段
插入测试数据
INSERT INTO node2(id,name, num, p_id,search_key) VALUES
(1,'A',10,0,'0-1'),
(2,'B',7,1,'0-1-2'),
(3,'C',3,1,'0-1-3'),
(4,'D',1,3,'0-1-3-4'),
(5,'E',2,3,'0-1-3-5'),
(6,'F',2,0,'0-6'),
(7,'G',2,6,'0-6-7');
SELECT * FROM node2 WHERE p_id = 0 AND search_key LIKE '0-%' AND level = 0;
# SELECT * FROM node2 WHERE search_key LIKE '{A.search_key}%';
SELECT * FROM node2 WHERE search_key LIKE '0-1-%';
# 例如,更新节点C的权重
UPDATE node2,( SELECT sum(num) AS sum FROM node2 WHERE search_key LIKE '0-1-3-%') rt SET num = rt.sum WHERE id=3;
UPDATE node2,(SELECT search_key FROM node2 WHERE id = 4) rt SET num=num+1 WHERE locate(id,rt.search_key);
假设删除节点子孙全部清理
DELETE FROM node2 WHERE search_key LIKE '0-1-2%';
# UPDATE node2, SET p_id = {B.p_id}
UPDATE node2 SET p_id = 1 AND search_key = concat('0-1-',id);
# 删除
DELETE FROM node2 WHERE id=2;


感谢支持与鼓励~