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

Posted

技术标签:

【中文标题】如何在 [mysql] DBMS 中存储基于树的分层数据? [复制]【英文标题】:How to store the tree based hierarchical data in [mysql] DBMS? [duplicate] 【发布时间】:2019-06-28 13:47:33 【问题描述】:

用户组:

用户 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】:

这可能不是最好的解决方案,但您可以创建一个属性 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 方法。当您的数据看起来像一棵树时会更好

【讨论】:

以上是关于如何在 [mysql] DBMS 中存储基于树的分层数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL学习记录

MySQL数据库

具有多列的基于 MySQL 游标的分页

在mysql 数据库下,基于sql 语言的分页语句

Mysql学习之数据库的了解

MySQL使用操作