树形菜单是一种树形结构的数据结构,常用于表示层级关系的数据。在数据库中,可以用SQL语句实现树形菜单的存储和查询。
创建树形菜单表
创建一个名为 tree_menu 的表,其中包含以下字段:
sql
CREATE TABLE tree_menu (
id INT NOT NULL AUTO_INCREMENT,
parent_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (parent_id) REFERENCES tree_menu (id)
);
插入树形菜单数据
以下是一个示例,展示如何插入树形菜单数据:
sql
INSERT INTO tree_menu (parent_id, name) VALUES (0, 'Root');
INSERT INTO tree_menu (parent_id, name) VALUES (1, 'Item 1');
INSERT INTO tree_menu (parent_id, name) VALUES (1, 'Item 2');
INSERT INTO tree_menu (parent_id, name) VALUES (2, 'Item 1.1');
INSERT INTO tree_menu (parent_id, name) VALUES (3, 'Item 1.2');
查询树形菜单
查询所有菜单项
要查询所有菜单项,可以使用以下语句:
sql
SELECT * FROM tree_menu;
查询特定父级下的菜单项
要查询特定父级下的菜单项,可以使用以下语句:
sql
SELECT * FROM tree_menu WHERE parent_id = ?;
查询祖先菜单项
要查询一个菜单项的祖先菜单项,可以使用递归查询,如下所示:
sql
WITH RECURSIVE ancestors AS (
SELECT id, parent_id, name
FROM tree_menu
WHERE id = ?
UNION ALL
SELECT t.id, t.parent_id, t.name
FROM tree_menu AS t
JOIN ancestors AS a ON t.id = a.parent_id
)
SELECT * FROM ancestors;
查询后代菜单项
要查询一个菜单项的后代菜单项,可以使用递归查询,如下所示:
sql
WITH RECURSIVE descendants AS (
SELECT id, parent_id, name
FROM tree_menu
WHERE parent_id = ?
UNION ALL
SELECT t.id, t.parent_id, t.name
FROM tree_menu AS t
JOIN descendants AS d ON t.parent_id = d.id
)
SELECT * FROM descendants;