MySQL 嵌套列表的浮动 ID?

MySQL float ids for nested list?

我的数据库如下所示:

我可以用这样的查询列出行:

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?

的回答