Суть в том, что один менеджер может работать в нескольких городах и мне нужно вывести на странице со списком всех менеджеров - их данные. Получается таблица для отображения должна быть:
Имя | Номер телефона | Город(-а)
Помогите пожалуйста написать запрос, чтобы выбрать имя, номер телефона и все города, которые закреплены за менеджером. Простые JOIN'ы не подходят, т.к. я получаю дублирование данных менеджера, если за ним закреплено несколько городов.
Кирилл Лобанов, дорогой пользователь, настоятельно рекомендуем еще раз обратить самое пристальное внимание на п. 3.1 регламента работы сервиса (и, в особенности, на его последний абзац).
В противном случае, ваши вопросы будут удаляться по причине тег-спама, а систематические нарушения приведут к блокировке учетной записи.
Кирилл Лобанов, правильно ли я понимаю, что если менеждер Иван работает в 3х городах (Москва, Пермь, Соликамск), а Петр работает только в одном (Москва), то должно быть так:
Иван | ****** | Москва, Пермь, Соликамск
Петр | ****** | Москва
Для правильного вопроса надо знать половину ответа
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`
Да, просто 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
Начиная с MySQL 5.7 такой запрос в дефолтной конфигурации выдаст ошибку, поскольку поля managers.Имя и managers.Номер_телефона не входят ни в GROUP BY, ни в агрегатную функцию.
Rsa97, совершенно верно, наткнулся на нее, сидел ковырял код, 1055 ошибка получается.
#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.w.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by