Связь many-to-many и условие IN
Есть 3 таблицы: orders, managers, order_managers (таблица для привязки N менеджеров к заказу)
Выборка происходит так:
SELECT
*, group_contact(order_managers.manager_id) as menagers_ids
FROM orders INNER JOIN order_managers ON order_managers.order_id=orders.id
GROUP BY orders.id
Но потребовалось сделать выборку по конкретному manager_id. И если я добавляю в условие WHERE, или JOIN manager_id=?i, то это конечно сработает, но в результате выборки в menagers_ids поместится только 1 менеджер, тот, по которому был поиск и это не удивительно.
Раньше я бы делал вообще 2 запроса, второй для того, чтобы достать идентифкаторы менеджеров, сейчас я узнал про интересное решение с group_contact. Но что то для условия в подобных решений не удалось найти. У самого приходит на ум конечно сделать через HAVING, но не понимаю как делать проверку IN с полем group_contact. Подскажите, пожалуйста.
Ответы (1 шт):
При помощи обычного SQL
SELECT
*, group_contact(om.manager_id) as menagers_ids
FROM orders o INNER JOIN order_managers ON om.order_id=o.id
WHERE o.order_id IN
(SELECT
t.order_id
FROM order_managers t
WHERE t.manager_id = 81)
GROUP BY orders.id
Функция group_contact возвращает строку, оператор IN соответственно со строками не работает. Можно каждый идентификатор обрамлять каким-нибудь символом, чтобы строка получилась вида #1111#2222#81# и искать как подстроку #81#, но такое решение специфичное.