很多到很多很多mysql查询

时间:2013-11-25 02:21:11

标签: mysql sql

我正在尝试创建一个结构化的数据库,以便我可以执行一个查询并获取所需的所有数据。

这就是我现在的结构:

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_relationproduct_id还是category_id

这可能吗?或者我在这里做错了什么?

2 个答案:

答案 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)

将每个产品的类别放在一个数组中,序列化数组,然后将其存储在数据库中......