【问题标题】:concat string in mysql record wisemysql记录明智的连接字符串
【发布时间】:2012-01-19 07:13:21
【问题描述】:

我当前的查询:-

select
p.id as product_id,
p.product_name,
child.name as category_name,
parent.name as parent_category_name
from category child 
left join products p on FIND_IN_SET(child.id,p.category_ids)
left join category parent on parent.id = child.parentid and parent.parentid = 0
where p.id = 7  

当前结果:-

product_Id | product_name | category_name | parent_category_name
   7           ponds          cream              chemical
   7           ponds          medicine           chemical
   7           ponds          powder             Ayurvedic 

现在我想按产品 ID 进行分组,并且子/父类别应以逗号分隔的格式显示,例如“奶油、药物、粉末”。所以这里的记录数只有这样一个:-

预期结果:-

product_Id | product_name | category_name        |   parent_category_name
   7           ponds       cream,medicine,powder  chemical,chemical,Ayurvedic 

我不知道它是否可能在 mysql 查询中。

任何建议或想法将不胜感激。

非常感谢。

【问题讨论】:

标签: mysql join left-join concat


【解决方案1】:

这将使用GROUP_CONCAT() 并按product_idproduct_name 分组。由于您现有的查询已经提取了必要的列和行,因此您只需应用 GROUP_CONCAT() 并添加 GROUP BY 子句:

select
  p.id as product_id,
  p.product_name,
  /* GROUP_CONCAT() */
  GROUP_CONCAT(DISTINCT child.name) as category_name,
  GROUP_CONCAT(DISTINCT parent.name) as parent_category_name
from category child 
  left join products p on FIND_IN_SET(child.id,p.category_ids)
  left join category parent on parent.id = child.parentid and parent.parentid = 0
where p.id = 7
/* Add a GROUP BY clause */
GROUP BY 
  product_id,
  product_name

【讨论】:

  • 谢谢你,Michael :) 而且我想删除重复的值,比如在 parent_category_name 中看到的化学物质是重复的,所以我只想列出“化学物质,阿育吠陀”?
【解决方案2】:

为此使用GROUP_CONCAT()

SELECT `product_Id`, GROUP_CONCAT(`category_name`)
FROM ...
GROUP BY `product_Id`

【讨论】:

    猜你喜欢
    • 2013-12-14
    • 2014-03-31
    • 2018-02-01
    • 2011-08-23
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多