首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用MySQL在不同字段上使用多个GROUP_CONCAT

使用MySQL在不同字段上使用多个GROUP_CONCAT
EN

Stack Overflow用户
提问于 2011-09-22 05:15:02
回答 4查看 26.4K关注 0票数 27

我有一个类似这样的查询:

代码语言:javascript
复制
SELECT product.id,
       GROUP_CONCAT(image.id) AS images_id,
       GROUP_CONCAT(image.title) AS images_title,
       GROUP_CONCAT(facet.id) AS facets_id
...
GROUP BY product.id

查询可以工作,但不是预期的那样,因为如果我有一个有5个面和1个图像的产品(假设有一张带有id=7的图像),那么我在“images_id”中会得到如下所示:

“7,7,7,7”

如果我有两个图像(7和3),那么我会得到如下内容:

"7,7,7,7,7,3,3,3,3,3"

在facets中,我得到了如下内容:

"8,7,6,5,4,8,7,6,5,4"

我认为MySQL正在对查询返回的不同行进行某种类型的联合,然后将所有内容连接起来。

我的预期结果是(对于最后一个示例):

images_id = "7,3“

facets_id = "8,7,6,5,4“

我可以在GROUP_CONCAT中使用DISTINCT来获得它,但是我还有另一个问题:如果我有两个具有相同标题的图像,其中一个被省略了,然后我会得到类似于:

images_id = "7,3,5“

images_title = "Title7and3,Title5“

所以我很怀念images_id和images_title之间的关系。

有没有人知道是否可以在MySQL中进行这个查询?

也许我把所有的事情都复杂化了,却没有任何真正的好处。我试着只执行一个查询,因为性能,但现在我不确定执行两个查询是否更快(例如,一个用于选择面,另一个用于图像)。

请解释一下您认为最好的解决方案是什么,以及为什么。

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2012-06-12 03:31:12

只要添加DISTINCT即可。

示例:

GROUP_CONCAT(DISTINCT image.id) AS images_id

票数 50
EN

Stack Overflow用户

发布于 2011-09-22 05:23:40

您需要分别获取每个组:

代码语言:javascript
复制
SELECT
    p.id,
    images_id,
    images_title,
    facets_id,
    ...
FROM PRODUCT p
JOIN (SELECT product.id, GROUP_CONCAT(image.id) AS images_id
      FROM PRODUCT GROUP BY product.id) a on a.id = p.id
JOIN (SELECT product.id, GROUP_CONCAT(image.title) AS images_title
      FROM PRODUCT GROUP BY product.id) b on b.id = p.id
JOIN (SELECT product.id, GROUP_CONCAT(facet.id) AS facets_id
      FROM PRODUCT GROUP BY product.id) b on c.id = p.id
...
票数 10
EN

Stack Overflow用户

发布于 2013-05-13 14:04:01

你可以只添加DISTINCT关键字,你会得到你想要的结果。

代码语言:javascript
复制
SELECT tb_mod.*, tb_van.*,
GROUP_CONCAT(DISTINCT tb_voil.vt_id) AS voil,
GROUP_CONCAT(DISTINCT tb_other.oa_id) AS other, 
GROUP_CONCAT(DISTINCT tb_ref.rp_id) AS referral
FROM cp_modules_record_tbl tb_mod 
LEFT JOIN cp_vane_police_tbl tb_van ON tb_van.mr_id= tb_mod.id
LEFT JOIN cp_mod_voilt_tbl tb_voil ON tb_voil.mr_id= tb_mod.id
LEFT JOIN cp_mod_otheraction_tbl tb_other ON tb_other.mr_id= tb_mod.id
LEFT JOIN cp_mod_referral_tbl tb_ref ON tb_ref.mr_id= tb_mod.id
WHERE tb_mod.mod_type = 2 GROUP BY tb_mod.id
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7506750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档