gpt4 book ai didi

mysql - 在 MySQL 中生成分层数据集

转载 作者:行者123 更新时间:2023-11-29 14:21:03 25 4
gpt4 key购买 nike

我有一个用户 ID 值表,A 列包含管理用户,B 列包含用户。例如,我希望能够显示管理其他用户的用户列表。

User 1 can manage user 2User 1 can manage user 3User 3 can manage user 4User 5 can manage user 6

这会产生下表:

--------------------------|  mgtuserId  |  userId  |--------------------------|     1       |     2    ||     1       |     3    ||     3       |     4    ||     5       |     6    |--------------------------

我想要一个查询或存储过程,通过沿着层次结构跟踪管理用户来返回管理用户列表。因此,如果您是用户 1,则会输出以下列表。

 1, 2, 3, 4 

那么如果您是用户 2,那么您将只有 2 个输出。

 2 

然后,如果您是用户 5,则会输出以下列表,依此类推。

 5, 6 

鉴于我有每个用户 ID,实现此目的的最佳方法是什么。

提前致谢。

最佳答案

将 YOUR_TABLE 替换为您的表名称

DELIMITER $$

CREATE PROCEDURE get_users(IN base INT UNSIGNED)
BEGIN
DECLARE ids TEXT DEFAULT '';

SET @parents = base;
SET ids = base;

loop1: LOOP
SET @stm = CONCAT(
'SELECT GROUP_CONCAT(userId) INTO @parents FROM YOUR_TABLE',
' WHERE mgtuserId IN (', @parents, ')'
);

PREPARE fetch_childs FROM @stm;
EXECUTE fetch_childs;
DROP PREPARE fetch_childs;

IF @parents IS NULL THEN LEAVE loop1; END IF;

SET ids = CONCAT(ids, ',', @parents);
END LOOP;

SET @stm = CONCAT('(SELECT mgtuserId FROM YOUR_TABLE WHERE mgtuserId=',base,') UNION (SELECT userId FROM YOUR_TABLE WHERE userId IN (',ids, '))');

PREPARE fetch_childs FROM @stm;
EXECUTE fetch_childs;
DROP PREPARE fetch_childs;
END;

正在检查

CALL get_users(1);
1
2
3
4

并在 my.ini 中设置

thread_stack = 256K

关于mysql - 在 MySQL 中生成分层数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11749090/

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