2011-02-13 102 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