我在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)我做错了什么?谢谢。
答案 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