我的情况不同a category
a sub category
more than one category
。我该如何设计呢?
下面的树形结构不能解决我的问题。我应该ParentCategoryId
作为字符串,并且可以在其中包含多个类别ID。然后进行计算以解析父类别,或者您是否建议我另一种解决方案?解决这个问题的最佳解决方案是什么?
--Category--
Id
ParentCategoryId
CategoryName
提前致谢,
答案 0 :(得分:2)
此标准SQL解决方案是一个交叉表。您将有两个表,类别和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)
答案 1 :(得分:1)
除了约翰·克拉克所说的,还有一个预先计算好的所有类别的表格,如:
Item Direct Categories
+------------+------------+
|itemId |categoryId |
+------------+------------+
|1 |1 |
+------------+------------+
|3 |2 |
+------------+------------+
然后
Item All Categories
+------------+------------+
|itemId |categoryId |
+------------+------------+
|1 |1 |
+------------+------------+
|3 |2 |
+------------+------------+
在第一个中,您只会保存商品的类别,但在第二个商品中,您还会将每个商品的类别的超级类别关联起来,这样您就可以检查哪个项目只有一个查询是否有类别。