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

How to store the tree based hierarchical data in [mysql] DBMS?

用户组:

用户 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 数据库中存储数据的正确方法吗? 任何人都可以帮助我改进这个数据库结构。谢谢。

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

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

因此 table 将如下所示:

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

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

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

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

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

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