2011-10-19 35 views
0

請幫我這個: 我有這樣一個表:SQL查詢 - 將多個條件對一個產品

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

,我想從這個表像這樣的選擇:

SELECT COUNT從table其中(id_feature = 1個AND id_feature_value = 50)AND(id_feature = 2且id_feature_value = 54)(id_product)AND(id_feature = 5 AND id_feature_value = 67)

我的查詢必須米滿足條件。像有count(條件)= 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 

要獲得只是符合條款的產品總數

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和bb)?更新:現在我明白了,它也在OP中。 – wildplasser

+0

@wildplasser是正確的,應該使用'OR'。 –