【发布时间】:2016-08-02 08:31:53
【问题描述】:
这是我的 Mysql 数据库
╔════╦═══════════╗
║ ID ║ Parent_ID ║
╠════╬═══════════╣
║ 1 ║ 0 ║
╠════╬═══════════╣
║ 2 ║ 1 ║
╠════╬═══════════╣
║ 3 ║ 1 ║
╠════╬═══════════╣
║ 4 ║ 3 ║
╠════╬═══════════╣
║ 5 ║ 4 ║
╚════╩═══════════╝
我想要达到的目标:
当用户搜索 ID 1 时,我想获取所有 Parent_ID 为 1 的元素以及所有具有 1 作为他们的父母或祖父母或曾祖父母等等。
或只是 ID 1 的所有后代。
示例:
如果用户搜索 1,算法应该给出结果
{2,3,4,5} -- 4,5 因为 1 是他们的曾祖父母。如果用户搜索 2,算法应该给出空结果 { } 为 no 元素有 2 作为 Parent_ID
如果用户搜索 3,算法应该给出结果 {4,5} -- 5,因为 3 是它的祖父。
从数据库中保存和检索这类数据的好方法是什么?
我正在使用 Java 和 MySQL。
谢谢。
【问题讨论】:
-
这个问题目前的形式有点太宽泛了。我推荐阅读:mikehillyer.com/articles/managing-hierarchical-data-in-mysql
-
@DavidWallace ... 或者 4。
-
@DavidWallace OP 不知道它必须是递归的,因此问题
-
@DavidWallace 5 出现是因为 1 是 5 的曾祖父母,即 (1->2,3)、(3->4)、(4->5)。因此 1 是 5 的曾祖父母。
-
@PCP 如果您总是查询根父级,则将其存储在另一列(例如:Root_Parent_Id)中,您可以通过单个查询获取所有行。您还可以查看此链接以更深入地了解:blogs.msdn.microsoft.com/anthonybloesch/2006/02/15/…