Есть три таблицы `user`, `user_role`, `access_group`
В `user` инфа пользователя (логин, пароль, и т.д.)
В `access_group` роли или группы ролей (один пользователь может иметь много ролей)
В `user_role` связь между таблицами выше.
Задача состоит в то чтобы отобразить инфу о пользователе и его роли в формате:
|
log_user | |
email_user |
role1, role2, role3 |
Но загвоздка еще в поиске по ролям. Можно указать несколько ролей для поиска. Т.е. искать юзеров например с role1, role2 и отобразить инфу о них со всеми ролями включая role3.
Я написал громоздкий запрос для решения этой задачи. Возможно вы мне подскажите решение попроще.
SELECT
`t1`.*,
GROUP_CONCAT(`t3`.`name` SEPARATOR ', ') AS `role_group`
FROM
`user` AS `t1`
JOIN `user_role` AS `t2`
ON
`t1`.`id` = `t2`.`user_id`
JOIN `access_group` AS `t3`
ON
`t2`.`group_id` = `t3`.`id`
WHERE
`t1`.`id` IN(
SELECT
`user_id`
FROM
`user_role`
WHERE
`group_id` IN('20', '24')
GROUP BY
`user_id`
HAVING
COUNT(`user_id`) >= 2
)
GROUP BY
`t1`.`id`
LIMIT 0, 20
Если чесно он меня пугает(