- CREATE TABLE `t_node` (
- `node_id` int(11) NOT NULL AUTO_INCREMENT,
- `node_name` varchar(50) NOT NULL,
- `p_id` int(11) NOT NULL,
- `ancestor_path` varchar(100) NOT NULL,
- PRIMARY KEY (`node_id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
2 祖先路径的萌芽
设计的树节点的萌芽,重要有两种,一种是萌芽某个节点的所有后代节点(与萌芽祖先节点为某个已知节点的所有节点集合是一个意思),这种也是最常用的一种萌芽;一种是萌芽某个节点的所有祖先节点,这种不太常用。
1. 萌芽某个节点的所有后代节点 参考示例如下:
- SELECT * FROM t_node
- WHERE ancestor_path LIKE CONCAT(
- (SELECT * FROM (SELECT ancestor_path FROM t_node WHERE node_id=?)wt),
- ?,',%')
以上sql等于对id为?的某个节点的所有后代节点的萌芽方法一,还可应用以下方法:
萌芽方法二的方法加倍简洁。但推敲到萌芽方法一只用到了右模糊萌芽,可以应用索引,所以照样建议应用方法一进行萌芽。
须要留意的是以上两种方法查到的节点集合都不包含子节点,如不雅须要包含该节点的信息,还须要加上
- ... OR node_id=?
2. 萌芽某个节点的所有祖先节点
以下为机构表的一个重置存储过程,供以参考:
- SELECT * FROM t_node WHERE node_id REGEXP
- CONCAT('^(',
- WordStr((SELECT * FROM (SELECT ancestor_path FROM t_node WHERE node_id=?) wt),',','|'),
- '0)$')
以上方法萌芽祖先节点的效力确切不是很高,但推敲到该萌芽本身并不消,便姑且用之了。
3 祖先路径的插入,更新和删除
分别分插入,更新和删除来讲:
1. 插入
- INSERT INTO t_node (node_name,p_id,ancestor_path)
- VALUE('node?',?,
- CONCAT((SELECT * FROM (SELECT ancestor_path FROM t_node WHERE
推荐阅读
定律-或称轨则,可以指导我们并让我们在错误的缺点中进修。这篇文┞仿中,我将介绍我每次设计或实现软件时涌如今我脑海的五大年夜定律。个中有些和开辟有关,有些和体系组织有关。它们可以赞助你成为合>>>详细阅读
本文标题:MySQL树状数据的数据库设计
地址:http://www.17bianji.com/lsqh/37612.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示