【问题标题】:Categories and Subcategories - How to Design Database类别和子类别 - 如何设计数据库
【发布时间】:2013-01-26 05:30:41
【问题描述】:

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

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

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

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

谢谢大家!

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

【问题讨论】:

  • @JohnSmith - 问题不清楚。请告诉您实际上要在数据库中存储什么
  • Category Name|ParentID|ID|Budget| 是糟糕的设计。类别 ID 在这里?
  • 好吧,SQL Server 和 Oracle 为您提供了 CTE 的灵活性 .. mysql 不支持“with”子句。因此,在这种情况下,最好的方法是找到穿越树木的方法。 artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html .. iqwen.net/question/345840 .. 你可能想通过这些链接阅读.. 在第二个链接中你可能想阅读 andriy M 的答案,它详细说明了你 cud n cud 不使用 mysql 做什么......跨度>

标签: sql database database-design select


【解决方案1】:

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

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

关于您的问题,递归函数将是您最好的选择。我不认为你可以单独使用 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
    ...

祝你好运。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2015-10-15
    • 2023-03-11
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多