2011-10-19 15 views
0

上で複数の条件を入れてこれで私を助けてください: 私のようなテーブルがあります。SQLクエリ - 1つの製品

id_feature id_product id_feature_value 
1    1   50 
2    1   54 
5    1   67 

をそして、私はこのように、この表から選択します:

SELECT COUNT (id_product)tableここで(id_feature = 1 AND id_feature_value = 50)AND(id_feature = 2、id_feature_value = 54)AND(id_feature = 5 AND id_feature_value = 67)

私の照会する必要があり、Mから条件を満たしてください。 like カウント(条件)= 3

これを書く方法はわかりません!

私を助けてください!と申し訳ありません私の英語!

SELECT count(pf.id_product) AS nr_product, value, fv.id_feature_value, filter 
FROM `nk_category_features` cat_f 
INNER JOIN `nk_feature_value` fv ON fv.id_feature = '11' 
AND fv.value IS NOT NULL 
INNER JOIN `nk_product_features` pf ON pf.id_feature = '11' 
AND pf.id_feature_value = fv.id_feature_value 
INNER JOIN `nk_product` p ON p.id_product = pf.id_product 
AND p.product_active = '1' 
INNER JOIN `nk_product_features` pf1 ON (pf1.id_feature = '14' 
AND (
pf1.id_feature_value = '21' 
)) 
WHERE cat_f.id_feature = '11' 
AND filter >0 
GROUP BY pf.id_feature, pf.id_product 
ORDER BY abs(fv.value) ASC 

これは私が今使用し、私のクエリですが、私は幅内部結合ソリューションを好きではない、インナーは同じテーブルに参加

+1

予想される出力の例と、テーブル構造(または少なくとも関連するフィールド名)、より良い回答を提供することができます。 – Sparky

答えて

4

この試してみてください。取得するには

select id_product,count(*) 
from table 
where (id_feature = 1 AND id_feature_value = 50) 
    OR (id_feature = 2 AND id_feature_value = 54) 
    OR (id_feature = 5 AND id_feature_value = 67) 
group by id_product 
having count(*) = 3 

をwhere句を満たす製品の合計だけ

select count(*) 
from 
    (select id_product 
    from table 
    where (id_feature = 1 AND id_feature_value = 50) 
     OR (id_feature = 2 AND id_feature_value = 54) 
     OR (id_feature = 5 AND id_feature_value = 67) 
    group by id_product 
    having count(*) = 3 
) tmp 
+1

select_list/groupのid_featureを削除する必要があります。そうしないと、正しく動作しません。 –

+2

あなたはOR(aa AND bb)を意味しましたか?更新:今私は、それもOPにあった参照してください。 – wildplasser

+0

@wildplasserが正しい場合は、「OR」を使用する必要があります。 –

関連する問題