mysql如何实现树状结构图

2023-12-10 11:30:00 举报文章

MySQL如何实现树状结构图?下面是具体的实现过程。

首先,我们需要一个数据表来存储树的每个节点。表结构如下:

--by www.qzphp.cn
CREATE TABLE `tree` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(11) unsigned NOT NULL DEFAULT '0', `name` varchar(50) NOT NULL, PRIMARY KEY (`id`));

其中,parent_id字段表示当前节点的父节点ID,根节点的父节点ID默认为0。

接下来,我们需要插入一些测试数据:

--by www.qzphp.cn
INSERT INTO `tree` (`name`, `parent_id`) VALUES('根节点', 0),('节点1', 1),('节点2', 1),('子节点1', 2),('子节点2', 2),('节点3', 1);

现在,我们可以通过如下的SQL语句来获取整个树的结构:

--by www.qzphp.cn
SELECT T1.id, T1.name, T1.parent_id, CONCAT( REPEAT(' ', LEVEL - 1), -- 全角空格 IF(LEVEL = 1, '└─', '├─'), T1.name ) AS tree_nameFROM tree AS T1 JOIN ( SELECT id, @level := @level + 1 AS LEVEL FROM tree JOIN (SELECT @level := 0) AS INIT ) AS T2 ON T1.id = T2.idORDER BY tree_name;

该SQL语句使用了MySQL的REPEAT函数和级联查询,通过拼接空格和分隔符来实现树状结构图的效果:

--by www.qzphp.cn
id  
  
   
name parent_id  
  
   
tree_name1  
  
   
根节点 0 └─根节点2  
  
   
节点1 1 ├─节点13  
  
   
节点2 1 ├─节点24  
  
   
子节点1 2 │ └─子节点15  
  
   
子节点2 2 │ └─子节点26  
  
   
节点3 1 └─节点3

通过上述SQL语句的转化,我们得到了非常生动的树状结构图。除此之外,当数据表中新增或删除节点时,该SQL语句也可以自动更新树状结构图,十分方便。

如果你认为本文可读性较差,内容错误,或者文章排版错乱,请点击举报文章按钮,我们会立即处理!