2010-12-01 12 views
1

1対多のアプローチで、次のデータベース設計で特定のプロパティを持つ製品を照会する適切な方法は何でしょうか?mySQL:1対多テーブルのクエリ?

私は、次のようなものをやっている必要があることを推測する: SELECT (*) FROM productProperties WHERE property = 'weight' AND value = '10'

しかし、私は同じクエリでブルー重量= 10 &色=の両方を持っている製品に必要なものか?データベース設計の

例:

表:製品

------------------------ 
id | name  | price 
------------------------ 
0  | myName | 100 
1  | myName2 | 200 

表:productProperties

------------------------------------------------ 
product | property  | Value 
------------------------------------------------ 
0  | weight  | 10 
1  | weight  | 20 
1  | color  | blue 

答えて

3

の商品がある場合は、同じクエリの の両方の重量= 10 &の色=青の両方が必要な場合はどうなりますか?

一つのオプション:サブクエリと

select product, name 
    from products inner join productProperties 
    on (products.id = productProperties.product) 
where (property = 'weight' and value = '10') 
    or (property = 'color' and value = 'blue') 
group by product, name 
having count(1) = 2 

別のオプション:

select id, name 
    from products p 
where exists (
     select 1 
      from productProperties pp1 
      where p.id = pp1.product 
      and pp1.property = 'weight' 
      and value = '10' 
     ) 
    and exists (
     select 1 
      from productProperties pp2 
      where p.id = pp2.product 
      and pp2.property = 'color' 
      and value = 'blue' 
     ) 
0
SELECT * FROM productProperties p 
WHERE (SELECT COUNT(*) FROM productProperties p1 WHERE p1.product = p.product AND 
((property = 'weight' AND value = '10') OR (property = 'color' AND value = 'blue')) 
=2 
関連する問題