2010-05-19 3 views
1

Salut J'ai une table qui ressemble à ceciMySQL sélectionnez l'aide

id : productid : featureid 
(1, 1, 16) 
(2, 1, 21) 
(3, 1, 25) 
(4, 2, 16) 
(5, 2, 21) 
(6, 2, 27) 

où FEATUREID est une clé étrangère à une autre table.

Je dois sélectionner des produits qui ont les deux caractéristiques de 16 et 25, dans l'exemple ce serait productid 1 mais pas productid 2. Quelqu'un peut-il me montrer un exemple de la façon de formater cette requête?

Répondre

1

Je n'ai pas compris la dernière déclaration à propos de "productid 1 but not productid 2".

Je ne l'ai pas testé ce code, mais vous pouvez faire quelque chose comme ceci:

SELECT a.* FROM `products` AS a INNER JOIN `products` AS b ON (a.`productid` = b.`product_id` WHERE `featureid` = 25) WHERE a.`featureid` = 16 

ou

SELECT * FROM `products` WHERE `featureid` = 16 AND `product_id` IN (SELECT `productid`FROM `products` WHERE `featureid` = 25) 
+0

Je voulais dire que l'instruction se traduira par productid 1 car elle a les deux caractéristiques 16 & 25 – user344766

2

Pour obtenir tous les produits qui ont à la fois des fonctionnalités, vous pouvez utiliser un sous- requête, puis utilisez Group By avec Having -clause pour renvoyer uniquement les produits qui ont les deux fonctionnalités (en supposant que productId, featureId est unique dans votre tableau).

Select productId 
From (
    Select productId 
    From your_table 
    Where featureId In (16, 25) 
) 
Group By productId 
Having Count(*) = 2