几个group_concat在同一个查询中

时间:2013-11-17 18:14:41

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

我在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

这没关系(我在与id_main = 1关联的auxiliarione中有3个寄存器)。但是如果我想用这个查询加入另一个辅助表(有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)我做错了什么?谢谢。

1 个答案:

答案 0 :(得分: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
相关问题