Доброе время суток, сделал запрос который должен получать из двух таблиц ID для таблицы roles, а уже потом в SELECT через GROUP_CONCAT собирать их через запятую, но запрос выводит всего первую запись из roles, а остальные только если получать данные по очереди будет примерно так:
Мне же необходимо получать вот в таком виде
Схема бд
DBDesignerSELECT u.user, GROUP_CONCAT(DISTINCT r.name SEPARATOR ",") AS roles
FROM users AS u
LEFT JOIN roles AS r ON r.id IN (
SELECT role
FROM roles_groups
WHERE gid=u.gid
UNION
SELECT role
FROM roles_users
WHERE user=u.id
)
WHERE u.id=1
GROUP BY u.id, r.id
Вопрос ещё будет изменятся, добавляя к нему ещё информацию через JOIN-ы.
UPD: Есть готовый запрос который работает, но его нужно было бы оптимизировать.
SELECT `ur`.`id` AS `id`,
`b`.`id` AS `botId`,
`g`.`name` AS `groupName`,
`ui`.`forever` AS `ignoreForever`,
`ui`.`expires` AS `ignoreExpires`,
GROUP_CONCAT(DISTINCT r.name SEPARATOR ",
") AS roles
FROM
(SELECT `u`.`id` AS `id`,
`u`.`user` AS `user`,
`u`.`gid` AS `gid`,
`ru`.`role` AS `role`
FROM `users` AS `u`
LEFT JOIN `roles_users` AS `ru`
ON `ru`.`user` = `u`.`id`
UNION
SELECT `u`.`id` AS `id`,
`u`.`user` AS `user`,
`u`.`gid` AS `gid`,
`rg`.`role` AS `role`
FROM `users` AS `u`
LEFT JOIN `roles_groups` AS `rg`
ON `rg`.`gid` = `u`.`gid`) AS `ur`
LEFT JOIN `bots` AS `b`
ON `b`.`id` = 2
LEFT JOIN `users_ignores` AS `ui`
ON `ui`.`user` = `ur`.`id`
AND `ui`.`bot` = `b`.`id`
INNER JOIN `groups` AS `g`
ON `g`.`id` = `ur`.`gid`
LEFT JOIN `roles` AS `r`
ON `r`.`id` = `ur`.`role`
GROUP BY `ur`.`id`, `g`.`id`, `ui`.`id` limit 5
Результат получается вот такой