这是我的Mysql数据库
╔════╦═══════════╗
║ ID ║ Parent_ID ║
╠════╬═══════════╣
║ 1 ║ 0 ║
╠════╬═══════════╣
║ 2 ║ 1 ║
╠════╬═══════════╣
║ 3 ║ 1 ║
╠════╬═══════════╣
║ 4 ║ 3 ║
╠════╬═══════════╣
║ 5 ║ 4 ║
╚════╩═══════════╝
我想达到的目标是:
当用户搜索 ID 1 时,我希望获得所有元素( Parent_ID 为1),以及具有E 210
<代码>E 1111<代码>E 212E 113
的元素,以及它们的父或大父母亲等等的ID。
或仅仅是ID 1.的所有后代
示例:
从数据库中保存和检索这类数据的好方法是什么?
我正在使用Java和MySQL。
谢谢。
发布于 2016-08-02 08:40:00
看到您的数据模型,您无法在一个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/
https://stackoverflow.com/questions/38715462
复制相似问题