@Lobanov

Объединение 3х таблиц и выборка данных без дублирования?

Всем привет!
Ребят, собственно вопрос в следующем.

Есть 3 таблицы.
cities - города
kladr_id - уникальный ключ города

manager_cities - города которые закреплены за менеджером
manager_id - ID юзера из таблицы managers
kladr_id - из таблицы cities

managers - таблица с данными менеджеров
manager_id - уникальный ключ менеджера

Суть в том, что один менеджер может работать в нескольких городах и мне нужно вывести на странице со списком всех менеджеров - их данные. Получается таблица для отображения должна быть:

Имя | Номер телефона | Город(-а)

Помогите пожалуйста написать запрос, чтобы выбрать имя, номер телефона и все города, которые закреплены за менеджером. Простые JOIN'ы не подходят, т.к. я получаю дублирование данных менеджера, если за ним закреплено несколько городов.
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `m`.`name`, `m`.`phone`, IFNULL(`t`.`cities`, '')
  FROM (
    SELECT `mc`.`manager_id` AS `manager_id`, 
           GROUP_CONCAT(`c`.`name`) AS `cities`
      FROM `manager_cities` AS `mc`
      JOIN `cities` AS `c` ON `c`.`kladr_id` = `mc`.`kladr_id`
      GROUP BY `mc`.`manager_id`
  ) AS `t`
  RIGHT JOIN `managers` AS `m` ON `m`.`manager_id` = `t`.`manager_id`
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Да, просто JOIN тут не поможет, необходимо группировать результаты, а поле с городом конкатенировать:
SELECT managers.Имя, managers.Номер_телефона,  GROUP_CONCAT(cities.Город) as Город(а)  
FROM managers 
JOIN manager_cities USING(manager_id) 
JOIN cities USING(kladr_id) 
GROUP BY managers.manager_id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы