如何在[mysql] DBMS中存储基于树的分层数据?

时间:2019-06-28 13:47:33

标签: mysql database hierarchical-data

用户组:

用户1创建用户2,3,4。

用户2创建用户5,6,7。

用户6创建用户8,9,10等...

最后,用户1可以管理所有用户。和6可以管理8,9,10。

我打算这样存储,

user - created_by

2   -        1

3    -      1

4    -      1

5    -      2   

这是在MySQL数据库中存储数据的正确方法吗? 任何人都可以帮助我改善这种数据库结构。谢谢。

1 个答案:

答案 0 :(得分:1)

这可能不是最佳解决方案,但是您可以创建一个表示父树的属性hierarchy

例如,用户1创建用户2,用户2创建用户3,该用户3的属性值将为:“ 1,2”

因此表将如下所示:

| id | hierarchy |
|----|-----------|
| 1  |  NULL     |
| 2  | "1"       |
| 3  | "1,2"     |
| 4  | "1,2"     |

如果我们要检索由user1管理的所有用户:

SELECT * FROM users WHERE FIND_IN_SET("1",hierarchy) > 0

如果我们想检索管理user3的所有用户:

SELECT * FROM users WHERE FIND_IN_SET (id, SELECT hierarchy FROM users WHERE id = 3) > 0

当然,解决方案是有限的,特别是如果您想进行复杂的查询,我建议您选择一种XML方法。最好让您的数据看起来像一棵树