Mysql group_contact с условиями - PullRequest
       12

Mysql group_contact с условиями

1 голос
/ 13 февраля 2011

Я думаю, что это редко, и я не уверен, если это возможно.

У меня есть этот запрос:

$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.

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

Но я не могу этого сделать.

Может кто-нибудь помочь мне, пожалуйста.

Ответы [ 3 ]

3 голосов
/ 13 февраля 2011

Вы можете добавить предложение 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 голос
/ 13 февраля 2011

Если вам нужны продукты с четырьмя метками, вы можете использовать:

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
1 голос
/ 13 февраля 2011

Предполагая, что (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
...