2012-11-22 41 views
1

你好,我有一些CMS(產品),擁有3個列的表:需要獲取具有與MySQL特定功能的所有產品

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的「值」列具有該類型功能的值。

E.x.想象的衣服,1獨特PRODUCT_ID - > 1個布 - >許多功能/性質在像彩色類型的材料價格尺寸等等等等

問題是它可能的,其中值1是抓取3行像

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

當產品1 feature_id = 1和 value2是值列上的字符串時產品1 feature_id = 9(feature_id大小)

我無法弄清楚如何在一個語句中做到這一點,沒有必須在PHP中合併數組。

+0

數據並不一致。對於product_id = 1,feature_id = 1,值爲藍色,但對於product_id = 1,feature_id = 8值爲棉花,不大。同樣的2,這將是紅色,羊毛,而不是紅色,中等。 – jachguate

+0

這只是我想要結果的另一個例子。將尺寸想象成另一個功能。第一個只是實際表結構的一個例子,只是爲了給你一個想法。讓我們只是說,而不是8它是9作爲尺寸功能的ID。 – Syd

回答

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 

好一些測試後,這一偉大工程:)

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) 
+0

沒有功能表:)它只是一個列。 id = 1的產品在表中有許多記錄,每個記錄都有一個獨立的feature_id,因此value列的值不同。只有1個表格有3列product_id,feature_id,value。在每列中id可以出現一次以上。 – Syd

+0

你可以發佈你的模式嗎?創建語句。 –

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,所以任何兼容的數據庫應接受。

我假設你有一個正常的設計與產品和product_features表

+0

nope只有一個名爲product的表具有3列product_id,feature_id,value。它可以是許多具有相同的product_id和不同的feature_id的記錄每個feature_id代表產品的不同屬性,並且該屬性存儲在value列內。 – Syd