Этот вопрос нужно было задавать раньше, но мне трудно его найти.
У меня есть таблица users
, allergies
, dietaries
. пользователи могут иметь несколько аллергий и несколько диет. Для этого у меня есть таблица user_allergies
, user_dietaries
, в которой хранится внешний ключ обеих таблиц.
Теперь я хочу показать список пользователей с соответствующими им аллергиями, названиями диет. Я попытался с левым соединением, как это ->
SELECT
users.user_id as 'id',
IFNULL(CONCAT(users.first_name,' ',users.last_name),'') as 'name',
IFNULL(GROUP_CONCAT(allergies.title),'') as 'allergies'
FROM (users
LEFT JOIN user_allergies
ON users.user_id = user_allergies.user_id
LEFT JOIN allergies
ON user_allergies.allergies_id = allergies.allergies_id
)
GROUP BY users.user_id;
Которые отвечают именно так, как я хочу ->
7 | Khabib Nurmagamedov | Milk,Corn
8 | Conor Mcgregor | Milk,Corn
Теперь я хочу получить dietaries
таким же образом. Поэтому я добавил Left Join для диет ->
SELECT
users.user_id as 'id',
IFNULL(CONCAT(users.first_name,' ',users.last_name),'') as 'name',
IFNULL(GROUP_CONCAT(allergies.title),'') as 'allergies',
IFNULL(GROUP_CONCAT(dietaries.title),'') as 'dietaries'
FROM (users
LEFT JOIN user_allergies
ON users.user_id = user_allergies.user_id
LEFT JOIN allergies
ON user_allergies.allergies_id = allergies.allergies_id
LEFT JOIN user_dietaries
ON users.user_id = user_dietaries.user_id
LEFT JOIN dietaries
ON user_allergies.allergies_id = dietaries.dietaries_id
)
GROUP BY users.user_id;
Но теперь я получаю вывод ->
7 | Khabib Nurmagamedov | Milk,Corn,Eggs,Meat | Milk,Corn,Eggs,Meat
8 | Conor Mcgregor | Milk,Corn,Eggs,Meat | Milk,Corn,Eggs,Meat
Что должно быть ->
7 | Khabib Nurmagamedov | Milk,Corn | Eggs,Meat
8 | Conor Mcgregor | Milk,Corn | Eggs,Meat
Я борюсь здесь. Что я должен делать?
Заранее спасибо.
Edit:
Те ответ ->
7 | Khabib Nurmagamedov | Milk,Corn,Milk,Corn | Milk,Milk,Corn,Corn
8 | Conor Mcgregor | Milk,Eggs,Milk,Eggs | Milk,Milk,Corn,Corn
Я думал, что обе таблицы объединяются, но, видимо, результат появляется дважды.
Результат должен быть ->
7 | Khabib Nurmagamedov | Milk,Corn | Milk,Corn
8 | Conor Mcgregor | Milk,Eggs | Milk,Corn