【问题标题】:Several group_concat in the same query同一查询中的多个 group_concat
【发布时间】:2013-11-30 19:28:15
【问题描述】:

我在 MySQL 中有一个主表 (m) 和两个辅助表 (a,b)。

我有这个问题:

SELECT *,group_concat(a.name_auxone) as namesone
FROM main m 
    LEFT JOIN auxiliaryone a ON m.id_main=a.id_main_auxone 
    WHERE m.id_main=1

...用php $row[]创建后,显示:

$row['namesone']-->name1,name2,name3

这没关系(我在 auxiliarione 中有 3 个寄存器与 id_main=1 相关联)。但是如果我想用这个查询加入另一个辅助表(有 2 个与 id_main=1 关联的寄存器)......

SELECT *,group_concat(a.name_auxone) as namesone,
         group_concat(b.name_auxtwo) as namestwo 
FROM main m 
    LEFT JOIN auxiliaryone a ON m.id_main=a.id_main_auxone 
    LEFT JOIN auxiliarytwo b ON m.id_main=b.id_main_auxtwo

...我有这个值:

$row['namesone']-->nameone1,nameone1,   nameone2,nameone2,   nameone3,nameone3
$row['namestwo']-->nametwo1,nametwo2,   nametwo1,nametwo2,   nametwo1,nametwo2

所以.. 在namesone(关联3个寄存器)中,每个寄存器重复2次。 在 namestwo(关联 2 个寄存器)中,这 2 个寄存器重复 3 次。 我在寄存器组之间放置了空格,以便清楚地看到它们是如何重复的(11、22、33 和 12、12、12)。

正确的显示应该是:

$row['namesone']-->nameone1,nameone2,nameone3
$row['namestwo']-->nametwo1,nametwo2

(123 和 12)我做错了什么?谢谢。

【问题讨论】:

  • 如果您使用示例数据创建一个 sqlfiddle.com url,将会很有帮助。

标签: php mysql join left-join group-concat


【解决方案1】:

您可以使用DISTINCT 完成此操作。试试这个:

SELECT *,group_concat(DISTINCT a.name_auxone) as namesone,
     group_concat(DISTINCT b.name_auxtwo) as namestwo 
FROM main m 
LEFT JOIN auxiliaryone a ON m.id_main=a.id_main_auxone 
LEFT JOIN auxiliarytwo b ON m.id_main=b.id_main_auxtwo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2014-03-09
    • 1970-01-01
    • 2020-07-03
    相关资源
    最近更新 更多