你好我在一些有3列的cms(产品)中有一个表:
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”列具有该类型特征的值。
E.x。想象衣服,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和时值列上的字符串 value2是产品1 feature_id = 9(feature_id for size)
时值列上的字符串我无法弄清楚如何在一个语句中执行此操作,而无需在php中合并数组。
答案 0 :(得分: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)
答案 1 :(得分: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表的正常设计
答案 2 :(得分: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
经过一些测试后,这很有效:)