我正在尝试创建一个结构化的数据库,以便我可以执行一个查询并获取所需的所有数据。
这就是我现在的结构:
Products Subcategory Category
------------- ------------- -------------
| id | name | | id | name | | id | name |
创建两个将产品与子类别联系起来的关系表以及类别的子类别(使其成为分层结构)对我来说是有道理的:
prod_sub_relation sub_cat_relation
---------------------------- ---------------------------
| id | prod_id | subcat_id | | id | subcat_id | cat_id |
因此,产品可以位于MULTIPLE子类别中,子类别告诉我们产品属于哪个类别。
使用这种结构,如果我想找到category_id
的所有产品,我必须查询sub_cat_relation
表,然后获取该数组并对{{1}进行另一次查询表(那就是凌乱)。
我的目标是找到包含一个ID的所有产品,或所有类别或所有子类别(无论是prod_sub_relation
,product_id
还是category_id
)
这可能吗?或者我在这里做错了什么?
答案 0 :(得分:1)
正如@ har07已经提到的,你可以在这个上使用一个简单的JOIN
。
我不完全确定你的表结构的其他细节但是
我将根据您目前提供的内容向您展示:
SELECT p.ID, p.Name, c.Name as CategoryName, s.Name as SubCategoryName
FROM Products P
INNER JOIN SubCategory S
ON P.subcat_id = S.subcat_id
INNER JOIN Category C
ON S.cat_id = C.cat_id
然后,您可以使用WHERE
子句指定要显示的产品及其类别和子类别
SELECT P.ID, P.Name, C.Name as CategoryName, S.Name as SubCategoryName
FROM Products P
INNER JOIN SubCategory S
ON P.subcat_id = S.subcat_id
INNER JOIN Category C
ON S.cat_id = C.cat_id
WHERE P.ID = valuehereforyourID
要获取给定Products
的{{1}}和SubCategory
,您只需更改category ID
子句,例如:
WHERE
要获取给定WHERE C.cat_id = ValueForCategoryIDhere
的{{1}}和Products
,您只需更改Category
子句,例如:
Subcategory ID
答案 1 :(得分:0)
将每个产品的类别放在一个数组中,序列化数组,然后将其存储在数据库中......