使用MySQL的产品功能选择器

时间:2011-06-26 22:59:48

标签: mysql relational-database inner-join

如下所示,与 Man S M 变体相关的产品(ID 100)。

功能表:

 feature_id      name
------------  ----------
     1          Gender
     2           Size

功能变体表:

 variant_id      feature_id        name
------------    -------------    --------
     1                1             Man
     2                1            Woman
     3                2              S
     4                2              M
     5                2              L

产品功能关系表:

 product_id      feature_id        variant_id
------------    -------------     ------------
    100               1                1
    100               2                3
    100               2                4

如何使用MySQL命令将这三种变体与产品联系起来?我真的没有这样做。

2 个答案:

答案 0 :(得分:1)

首先,您不必要地重复一些信息。您的产品功能关系表中不需要feature_id。这可能来自您的功能变体表。如果要添加新产品属性,则必须复制此信息。此外,您可能会陷入不一致的状态。如果您的某些报表依赖于一个表中的功能ID而另一个报表使用另一个表,并且您忘记更新其中一个报表,则可能会生成一个仍显示错误信息的报表。

要回答你的问题,你只需加入各个表格。

select pf.product_id, f.name, fv.name 
  from       productfeatures pf 
  inner join featurevariants fv   on pf.variant_id = fv.variant_id
  inner join features             on fv.feature_id = f.feature_id

您的示例中没有产品表,但如果您这样做,您也可以加入该产品表并获取产品名称而不是ID。

希望这有帮助!

答案 1 :(得分:1)

你没有展示'产品'表,但我假设有一个。

SELECT * FROM product p INNER JOIN product_feature_relation rel ON p.product_id = rel.product_id INNER JOIN feature_variants fv ON rel.variant_id = fv.variant_id INNER JOIN features f ON fv.feature_id = f.feature_id

如果您要立即迭代并对其进行操作,则此查询提供的结果可能无用。最好有2行代表唯一尺寸,而不是3行(2种尺寸+性别) - 但你没有在问题中指明,所以我不确定你是否需要它。