2011-02-13 101 views
1

我認爲這是罕見的,不知道如果posiblle。Mysql group_contact與條件

我有這個疑問:

$sql = "SELECT id_product,GROUP_CONCAT(id_tag ORDER BY id_tag ) AS producto 
FROM ps_product_tag 
where id_product = '194' 
GROUP BY id_product"; 

,我得到這樣的結果:

Array ([id_product] => 194 [producto] => 36,190,273,274,275,276,277,278,279,280,281,282,284,286,287,289) 

我需要的是做做一些過濾器導致與多個數組,其中的條件id_tag。

WHERE t.`id_tag` = '275' 
AND t.`id_tag` = '282' 
AND t.`id_tag` = '286' 
AND t.`id_tag` = '289' 

但我無法做到。

任何人都可以幫助我。

+1

你的意思是'id_tag'='275'或t.id_tag ='282'...?如果不是,那麼id_tag怎麼可能是'282'和'275'? – 2011-02-13 01:02:38

+0

嗨。我的意思是標籤275和282必須在數組中。都。 Thnx尋求幫助:) – SauronZ 2011-02-13 01:13:11

+1

請不要重新提出問題 - 而是*接受答案* - 點擊答案旁邊的複選標記。 – 2011-02-13 14:00:53

回答

3

您可以添加HAVING條款是這樣的:

SELECT 
    id_product, 
    GROUP_CONCAT(id_tag ORDER BY id_tag) AS producto, 
    COUNT(*) as `n` 
FROM ps_product_tag 
WHERE id_tag IN ('275', '282', '286', '287') 
GROUP BY id_product 
HAVING `n`=4 
1

假設(id_product, id_tag)是獨一無二的,試試這個:

SELECT id_product 
FROM ps_product_tag 
WHERE id_tag IN ('275', '282', '286', '287') 
GROUP BY id_product 
HAVING COUNT(id_tag) = 4 
1

如果你需要用四個標籤的產品,你可以使用:

SELECT 
     p.id_product, 
     GROUP_CONCAT(p.id_tag ORDER BY id_tag) AS producto, 
    FROM ps_product_tag as p INNER JOIN 
    (SELECT id_product 
     FROM ps_product_tag 
     WHERE id_tag IN ('275', '282', '286', '287') 
    GROUP BY id_product HAVING COUNT(*) = 4) as alltags 
    ON alltags.id_product = p.id_product 
GROUP BY id_product