我有一个不同的情况,a category
可以a sub category
是more than one category
。我应该如何设计这个?
我猜下面的树结构并不能解决我的问题。我应该ParentCategoryId
作为一个字符串来做,并且可以在其中包含多个类别 ID。然后进行计算以解决父类别或您是否建议我另一种解决方案?您解决此问题的最佳解决方案是什么?
--Category--
Id
ParentCategoryId
CategoryName
提前致谢,
我有一个不同的情况,a category
可以a sub category
是more than one category
。我应该如何设计这个?
我猜下面的树结构并不能解决我的问题。我应该ParentCategoryId
作为一个字符串来做,并且可以在其中包含多个类别 ID。然后进行计算以解决父类别或您是否建议我另一种解决方案?您解决此问题的最佳解决方案是什么?
--Category--
Id
ParentCategoryId
CategoryName
提前致谢,
对此的标准 SQL 解决方案是交叉表。您将有两个表、categories 和 categories_x,如下所示:
categories
+------------+------------+
|categoryId |name |
+------------+------------+
|1 |foo |
+------------+------------+
|2 |bar |
+------------+------------+
|3 |huh |
+------------+------------+
categories_x
+------------+------------+
|categoryId |parentId |
+------------+------------+
|3 |1 |
+------------+------------+
|3 |2 |
+------------+------------+
要获取类别 3 的父项,您的 sql 查询将如下所示:
SELECT categoryId, name
FROM categories
WHERE categoryId IN (SELECT parentId FROM categories_x WHERE categoryId = 3)
除了约翰克拉克所说的之外,最好有一个预先计算好的所有类别的表格,例如:
Item Direct Categories
+------------+------------+
|itemId |categoryId |
+------------+------------+
|1 |1 |
+------------+------------+
|3 |2 |
+------------+------------+
接着
Item All Categories
+------------+------------+
|itemId |categoryId |
+------------+------------+
|1 |1 |
+------------+------------+
|3 |2 |
+------------+------------+
在第一个中,您将只保存项目的类别,但在第二个中,您还将将每个项目与其类别的超级类别相关联,因此如果项目具有类别,您可以检查哪个只是单个查询或不。