2010-04-02 39 views
1

我被困在試圖解決證明比看起來更困難的問題。查找具有屬性列表的產品

考慮有產品具有的屬性相關聯的表,它看起來像這樣:

 
Products_id | Attribute_id 
    21  |  456 
    21  |  231 
    21  |  26 
    22  |  456 
    22  |  26 
    22  |  116 
    23  |  116 
    23  |  231 

接下來,我有我想,以用於獲取具有所有產品attribute_ids名單該列表中的屬性。例如,如果我使用這個列表(456,26)在上面的表中搜索,我應該得到這些產品ID 21和22. 另一個例子,如果我搜索(116,231)我應該得到23自產品23是唯一具有這兩個屬性的。

如何使用一個查詢來實現此目的?

我希望我明確提出了我的問題。

謝謝。

+2

>如果我搜索(116,231)我應該得到一個空的迴應 也許23,不是空的迴應? – glebm 2010-04-02 21:32:56

+0

感謝您指出了glebm,我解決了它。 – b2238488 2010-04-02 21:40:23

回答

1
select product_id from products 
where attribute_id in (123,234) 
group by product_id having count(*) = 2 
+0

如果你的先決條件不是它的獨特之處,你首先要區分表。 – tpdi 2010-04-02 21:40:37

+0

@tpdi:爲什麼?分組就是這麼做的 - 假設表中有唯一的行是合理的。 – 2010-04-02 21:43:31

3

如果你手工工藝查詢:

SELECT Products_ID 
    FROM ProductAttributes 
WHERE Attribute_ID IN (116, 231) 
GROUP BY Products_ID 
HAVING COUNT(*) = 2; 

這要求所有在那裏與給定的屬性條目數等於屬性的數量的產品。如果您想概括一下,您可以針對有趣的產品屬性ID值進行連接。

+0

這是有道理的,應該工作。 謝謝。 – b2238488 2010-04-02 21:43:20

0
select products_id from table where attribute_id = 456 
intersect 
select products_id from table where attribute_id = 26; 
+0

「相交」未被mySQL(版本5.1.33)識別。 – JYelton 2010-04-02 21:43:19

相關問題