Несколько групп объединяются в одном запросе


У меня есть одна основная таблица (m) в MySQL и две вспомогательные (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

Это нормально (у меня есть 3 регистра в auxiliarione, связанных с 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) Что я делаю не так? Спасибо.

Author: Albatrosz, 2013-11-17

1 answers

Вы можете сделать это с помощью 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
 1
Author: Patrick Kostjens, 2013-11-17 18:25:02