MySQL 嵌套列表的浮动 ID?
MySQL float ids for nested list?
我的数据库如下所示:
- id
- 电子邮件
- 留言
我可以用这样的查询列出行:
SELECT * FROM my_table
但是,我想将它们嵌套列出,如下所示:
my_name
my_message
another_name
another_message
new_name
new_message
some_name
some_message
使用普通 ID,它看起来像下面这样:
1
3
4
2
SQL不知道嵌套。我可以使用很常见的 parent_id
。但是,要正确处理分页等问题非常棘手。
我的一个想法是在 ID 上使用 float
。那么它将如下所示:
1
1.1
1.2
2
2.1
2.2
SQL 将使顺序正确无误,分页也很容易。
浮动方法有什么陷阱吗?我从来没见过有人用过它。
顺便说一下,使用 DECIMAL
将是一种没有四舍五入异常风险的方法,正如上面 Akina 的评论中提到的那样。
陷阱是你只能用这样的缩放数字模拟两个级别。如果你想要像 1.1.3 这样的第三级怎么办?您如何使它与 1.13 有何不同,第 13 次直接 child 低于 1.?
如果您想以规范化的方式支持层次结构,而不是将自己限制在两个级别,最好使用 parent_id
解决方案。
您还可以使用各种其他解决方案来模拟层次结构。关于在字符串中使用节点路径的注释是一个选项:1/1/3
。还有其他解决方案。您可能喜欢我对 What is the most efficient/elegant way to parse a flat table into a tree?
的回答
我的数据库如下所示:
- id
- 电子邮件
- 留言
我可以用这样的查询列出行:
SELECT * FROM my_table
但是,我想将它们嵌套列出,如下所示:
my_name
my_message
another_name
another_message
new_name
new_message
some_name
some_message
使用普通 ID,它看起来像下面这样:
1
3
4
2
SQL不知道嵌套。我可以使用很常见的 parent_id
。但是,要正确处理分页等问题非常棘手。
我的一个想法是在 ID 上使用 float
。那么它将如下所示:
1
1.1
1.2
2
2.1
2.2
SQL 将使顺序正确无误,分页也很容易。
浮动方法有什么陷阱吗?我从来没见过有人用过它。
顺便说一下,使用 DECIMAL
将是一种没有四舍五入异常风险的方法,正如上面 Akina 的评论中提到的那样。
陷阱是你只能用这样的缩放数字模拟两个级别。如果你想要像 1.1.3 这样的第三级怎么办?您如何使它与 1.13 有何不同,第 13 次直接 child 低于 1.?
如果您想以规范化的方式支持层次结构,而不是将自己限制在两个级别,最好使用 parent_id
解决方案。
您还可以使用各种其他解决方案来模拟层次结构。关于在字符串中使用节点路径的注释是一个选项:1/1/3
。还有其他解决方案。您可能喜欢我对 What is the most efficient/elegant way to parse a flat table into a tree?