这是我的Mysql数据库
╔════╦═══════════╗
║ ID ║ Parent_ID ║
╠════╬═══════════╣
║ 1 ║ 0 ║
╠════╬═══════════╣
║ 2 ║ 1 ║
╠════╬═══════════╣
║ 3 ║ 1 ║
╠════╬═══════════╣
║ 4 ║ 3 ║
╠════╬═══════════╣
║ 5 ║ 4 ║
╚════╩═══════════╝
我想要实现的目标:
当用户搜索 ID 1 时,我希望获取 Parent_ID 为1的所有元素以及 1 <的所有ID / em>作为他们的父母或祖父母或曾祖父母等等。
或者只是ID 1的所有后代。
示例:
如果用户搜索1,算法应给出结果
{2,3,4,5} - 4,5因为1是他们的曾祖父母。
如果用户搜索2,则算法应将空结果{}视为否 element有2作为Parent_ID
如果用户搜索3,算法应该给出结果{4,5} - 5因为3是它的祖母。
从数据库保存和检索这些类型数据的好方法是什么?
我正在使用Java和MySQL 。
感谢。
答案 0 :(得分:1)
查看您的数据模型,您无法在单个SQL查询中执行此操作,因为您需要未知级别的递归。您需要创建一个函数或存储过程来迭代后续查询的结果。
这个答案可能对您有所帮助: https://dba.stackexchange.com/questions/30021/mysql-tree-hierarchical-query
<强> [编辑] 强>
如果您始终查询根父级(即可能包含子级但没有父级的行),则可以在每行中存储该ID并按该列进行查询:
╔════╦═══════════╦════════════════╗
║ ID ║ Parent_ID ║ Root_Parent_ID ║
╠════╬═══════════╬════════════════╣
║ 1 ║ 0 ║ 1 ║
╠════╬═══════════╬════════════════╣
║ 2 ║ 1 ║ 1 ║
╠════╬═══════════╬════════════════╣
║ 3 ║ 1 ║ 1 ║
╠════╬═══════════╬════════════════╣
║ 4 ║ 3 ║ 1 ║
╠════╬═══════════╬════════════════╣
║ 5 ║ 4 ║ 1 ║
╠════╬═══════════╬════════════════╣
║ 6 ║ 0 ║ 6 ║
╠════╬═══════════╬════════════════╣
║ 7 ║ 6 ║ 6 ║
╠════╬═══════════╬════════════════╣
║ 8 ║ 7 ║ 6 ║
╚════╩═══════════╩════════════════╝
然后你可以查询:
SELECT * FROM mytable WHERE Root_Parent_ID = 1
否则,我建议您更深入地了解如何更有效地存储这些数据:https://blogs.msdn.microsoft.com/anthonybloesch/2006/02/15/hierarchies-trees-in-sql-server-2005/