2010-12-01 31 views
1

Quelle serait la méthode appropriée pour interroger des produits avec une propriété spécifique dans la conception de base de données suivante avec une approche un-à-plusieurs?mySQL: Interroger un-à-plusieurs -table?

Je suppose que je devrais faire quelque chose comme ce qui suit: SELECT (*) FROM productProperties WHERE property = 'weight' AND value = '10'

Mais si je dois produits qui a deux poids = 10 & color = blue dans la même requête?

Exemple de conception de base de données:

Table : Produits

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

Table: productProperties

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

Répondre

3

Que faire si j'ai besoin de produits qui a les deux poids = 10 & couleur = bleu dans le même question?

Une option:

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 

Une autre option avec les sous-requêtes:

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