1

您好,我在某些 cms(产品)中有一个包含 3 列的表格:

product_id feature_id value
1          1          blue
1          8          cotton
2          5          t-shirt
2          1          red
3          8          wool
1          9          large

每个产品都有自己的 id,每个产品都有一个功能列表(大约 10 个),每个 feature_id 代表一个功能。根据 feature_id,“value”列具有该类型功能的值。

例如想象衣服,1 个独特的 product_id -> 1 个布料 -> 许多特性/属性,如颜色类型、材料价格大小等。

问题是否可以获取 3 行之类的

product_id value1 value2
1          blue   large
2          red    medium
3          green  xsmall
4          purple xlarge

其中 value1 是产品 1 feature_id = 1 时 value 列上的字符串,value2 是 products 1 feature_id = 9 时 value 列上的字符串(feature_id 表示大小)

我无法在一个语句中弄清楚如何做到这一点,而不必在 php 中合并数组。

4

3 回答 3

1

加入将起作用: http ://dev.mysql.com/doc/refman/5.0/en/join.html

SELECT * FROM tbl_Products 
JOIN tbl_Features ON tbl_Products.product_id = tbl_Features.product_id
WHERE tbl_Features.feature_id = ?

或者

SELECT * FROM tbl_Products 
JOIN tbl_Features ON tbl_Products.product_id = tbl_Features.product_id
WHERE tbl_Features.feature_id in (1, 2, 3, 4)
于 2012-11-22T22:49:23.453 回答
0
SELECT DISTINCT product_id AS book_id, (

SELECT value
FROM cscart_product_features_values
WHERE product_id = book_id
AND feature_id =  '1'
) AS publisher, (

SELECT value
FROM cscart_product_features_values
WHERE product_id = book_id
AND feature_id =  '8'
) AS author
FROM  `cscart_product_features_values` 
ORDER BY product_id

好吧,经过一些测试,效果很好:)

于 2012-11-23T11:54:38.033 回答
0

你可以这样做:

select p.product_id
       (select value
          from product_features pf
         where pf.product_id = p.product_id
           and pf.feature_id = 1) as feature_1
       (select value
          from product_features pf
         where pf.product_id = p.product_id
           and pf.feature_id = 9) as feature_9
  from p.products

该查询是标准 SQL,因此任何兼容的数据库都应该接受它。

我假设您有一个带有 products 和 product_features 表的正常设计

于 2012-11-23T03:41:17.127 回答