首页 > 解决方案 > 嵌套列表的MySQL浮动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很常见的。但是,正确处理分页等是非常棘手的。

我的一个想法是float在 ids 上使用。然后它看起来像下面这样:

1
  1.1
  1.2
2
  2.1
  2.2

SQL 将使订单正确无误,并且分页也很容易。

浮动方法有什么陷阱吗?我从未见过有人使用它。

标签: mysqlsqlhierarchical-data

解决方案


DECIMAL顺便说一句,正如上面 Akina 的评论中提到的那样,使用将是一种没有舍入异常风险的方法。

陷阱是你只能用这样的比例数字模拟两个级别。如果你想要像 1.1.3 这样的第三级怎么办?你觉得这和 1.13 有什么不同,1.1 岁以下的第 13 个直系孩子?

parent_id如果您想以规范化的方式支持层次结构,而不将自己限制在两个级别,则最好使用该解决方案。

您还可以使用各种其他解决方案来模拟层次结构。关于在字符串中使用节点路径的注释是一种选择:1/1/3. 还有其他解决方案。您可能会喜欢我对将平面表解析为树的最有效/优雅的方法是什么的回答?


推荐阅读