【问题标题】:Mysql group_contact with conditionsMysql group_concat 有条件
【发布时间】:2011-02-13 00:57:40
【问题描述】:

我认为这种情况很少见,不确定是否可行。

我有这个问题:

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

我需要做的是对具有多个 where 条件的 id_tag 结果数组进行一些过滤。

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

但我做不到。

谁能帮帮我。

【问题讨论】:

  • 您的意思是 'id_tag' = '275' 还是 t.id_tag = '282' ...?如果不是,id_tag 怎么可能同时是“282”和“275”?
  • 嗨。我的意思是标签 275 和 282 必须在数组中。两个都。谢谢你的帮助:)
  • 请不要重命名问题 - 而是接受答案 - 单击答案旁边的复选标记大纲。

标签: mysql group-concat


【解决方案1】:

您可以像这样添加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

【讨论】:

  • 嗨芒。看来它正在工作。非常感谢您的帮助和知识!
  • 您只保证产品有四个标签之一,总共有4个标签
  • @Bonja 不完全是。 WHERE 子句发生在 GROUP BY 之前并过滤掉所有其他标签。失败的唯一方法是给定 id_product 的给定标签有多个副本。
  • 您是显示匹配产品的所有标签,还是只显示 in 标签?因为在分组之前过滤了其他行
  • 好吧,我认为他需要带有 4 个标签的产品,并且这些产品显示所有标签。但如果只需要这些标签,那就不一样了
【解决方案2】:

如果您需要四个标签的产品,您可以使用:

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

【讨论】:

    【解决方案3】:

    假设(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
    

    【讨论】:

    • 嗨,马克。我没有结果。尝试一种情况但仍然无法正常工作
    • 应该是 id_tag 而不是 id_product。我现在已经修好了。
    • 谢谢!谢谢!谢谢!谢谢!效果很好!!!在问这个问题之前我已经用了 4 个小时了。
    • 请注意,这并不要求所有 4 个标签都存在于结果集中,然后才被 GROUP BY 折叠。它只要求所有行至少匹配四个中的一个。
    • 嗨,丹。所以它不是我需要的。我需要 4 个标签存在 :( 你知道至少是否有可能吗?Thnx
    猜你喜欢
    • 2012-04-08
    • 2015-07-08
    • 2021-10-23
    • 2012-01-13
    • 2011-01-31
    • 2013-03-28
    • 2015-04-28
    • 2014-07-30
    • 2011-05-26
    相关资源
    最近更新 更多