Mysql 中使用链式存储结构保存一组数据,通常是通过在表中建立父子关系来实现的。比如,在表中保存每个节点的 id 和 parent_id, parent_id 表示该节点的父节点 id. 当我们需要查询某个节点的完整链条时,可以通过递归方式查询所有父节点直到跟节点为止。
下面是一个具体的实现过程:
以下是代码示例:
sql复制代码CREATE TABLE node(
id INT PRIMARY KEY NOT NULL,
name VARCHAR(50) NOT NULL,
parent_id INT,
-- 约束外键
CONSTRAINT fk_node_parent_id FOREIGN KEY (parent_id)
REFERENCES node(id)
);
-- 递归查询指定 id 的节点及其所有父节点
WITH RECURSIVE cte AS (
SELECT id, name, parent_id
FROM node
WHERE id = target_id
UNION ALL
SELECT p.id, p.name, p.parent_id
FROM node AS p
JOIN cte ON cte.parent_id = p.id
)
SELECT * FROM cte;
以上代码中,通过 WITH RECURSIVE 语法可以循环查询出目标节点的所有父节点信息,并最终返回完整的链条。其中 target_id 可以根据实际情况替换成需要查询链条的起始节点 id。
这样就能最少查询得到完整的链条了。