Sql 类别和子类别-如何设计数据库

Sql 类别和子类别-如何设计数据库,sql,database,database-design,select,Sql,Database,Database Design,Select,所以我正在创建一个数据库,它有一个类别,子类别,子类别,子类别。。。你明白了,它可以永远持续下去 所以我做了一张桌子。 类别 姓名|家长ID | ID |预算| 为了解释我的情况,我将假设每个类别都有预算。 我将如何制作一个Select语句,以获得类别及其子类别及其子类别的总预算。这也意味着,当我进入一个子类别时,我也应该能够看到它自己的子类别的总预算 任何建议都会对我大有帮助 谢谢大家 编辑:我忘了提到,数据库是MySQL。我将使用PHP在网页上显示数据。您正在使用一个难以搜索的模型(邻接列表

所以我正在创建一个数据库,它有一个类别,子类别,子类别,子类别。。。你明白了,它可以永远持续下去

所以我做了一张桌子。 类别 姓名|家长ID | ID |预算|

为了解释我的情况,我将假设每个类别都有预算。 我将如何制作一个Select语句,以获得类别及其子类别及其子类别的总预算。这也意味着,当我进入一个子类别时,我也应该能够看到它自己的子类别的总预算

任何建议都会对我大有帮助

谢谢大家


编辑:我忘了提到,数据库是MySQL。我将使用PHP在网页上显示数据。

您正在使用一个难以搜索的模型(邻接列表模型)。您是否考虑过合并嵌套集模型?这里有一篇关于这个主题的好文章:

关于你的问题,递归函数将是你最好的选择。我认为,除非您知道子类型的潜在范围,否则不能单独使用SQL来实现这一点。在这种情况下,您可以多次加入表--类似于这样:

SELECT t.CatName, SUM(t.Budget+t2.Budget+t3.Budget...)
FROM YourTable t
    LEFT JOIN YourTable t2 ON t2.parentid = t1.id
    LEFT JOIN YourTable t3 ON t3.parentid = t2.id
    LEFT JOIN YourTable t4 ON t4.parentid = t3.id
    ...

祝你好运。

希望以下链接将带你走上正确的道路


@JohnSmith-问题不清楚。请告诉我你到底想在数据库中存储什么
Category Name | ParentID | ID | Budget |
是糟糕的设计。类别Id在哪里?SQL Server和Oracle为您提供了CTE的灵活性。。mysql不支持“with”子句。因此,在这种情况下,最好的办法是找到穿越树木的方法。。你可能想通过这些链接来阅读。。在第二个链接中,你可能想阅读andriy M的答案,其中详细说明了你想用mysql做什么。。