Несколько групп объединяются в одном запросе
У меня есть одна основная таблица (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) Что я делаю не так? Спасибо.
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