gpt4 book ai didi

mysql - 如何获得获得树子的步骤数

转载 作者:可可西里 更新时间:2023-11-01 07:43:44 25 4
gpt4 key购买 nike

我该怎么做才能获得树的子树的步数。

例如我有这样一张表:

id    title      parent_id
1 A 0
2 B 0
3 C 1
4 F 3
5 O 3
6 D 2
7 J 6
8 T 2
9 P 8


A // 1 step
C //2 step
F //3 step
O //3 step

B //1 step
D //2 step
J //3 step
T //2 step
P //3 step

例如,如果我给出一个像 1 (id = 1 ) 这样的数字,它应该返回 1 并且 id=6 它应该返回 2 作为步骤。

我的数据库管理系统是 MySQL。

最佳答案

如果你的树不是很深,它可以是一个递归存储过程。像这样的东西(添加适当的条件处理程序)或任何同类的东西,它可以用多种方式编写:

DELIMITER $
CREATE PROCEDURE depth(IN n INT, OUT depth INT)
BEGIN
DECLARE parent INT DEFAULT 0;
SET max_sp_recursion_depth=255;
SELECT parent_id INTO parent FROM t WHERE id=n;
IF parent = 0 THEN SET depth = 1;
ELSE CALL depth(parent,depth); SET depth = depth + 1;
END IF;
END $
DELIMITER ;

CALL(6,@depth);
SELECT @depth;

另外,MariaDB 10.2 支持递归 CTE。它现在是早期测试版,因此不利于生产,但如果您只是评估您的选择,您可以尝试一下。这应该有效:

WITH RECURSIVE tree(id,parent_id,depth) AS 
(
SELECT id, parent_id, 1 from t WHERE parent_id=0
UNION ALL
SELECT t.id, t.parent_id, depth+1 FROM t JOIN tree ON tree.id = t.parent_id
) SELECT * FROM tree WHERE id = 6;

关于mysql - 如何获得获得树子的步骤数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40747672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com