V
V
Vladlen Hellsite2016-09-03 06:21:52
MySQL
Vladlen Hellsite, 2016-09-03 06:21:52

How to improve the request?

Good day, I have a problem, I am generating the following request:

SELECT `g`.`id` AS `groupId`,
       `g`.`name` AS `groupName`,
       GROUP_CONCAT(DISTINCT r.name SEPARATOR ",") AS ROLES
FROM
  (SELECT `u`.`user` AS `user`,
          `u`.`gid` AS `gid`,
          `ru`.`id` AS `role`
   FROM `users` AS `u`
   LEFT JOIN `roles_users` AS `ru` ON `u`.`user` = ?
   AND `ru`.`user` = `u`.`id`
   UNION SELECT `u`.`user` AS `user`,
                `u`.`gid` AS `gid`,
                `rg`.`id` AS `role`
   FROM `users` AS `u`
   LEFT JOIN `roles_groups` AS `rg` ON `u`.`user` = ?
   AND `rg`.`gid` = `u`.`gid`) AS `ur`
INNER JOIN `groups` AS `g` ON `g`.`id` = `ur`.`gid`
LEFT JOIN `roles` AS `r` ON `r`.`id` = `ur`.`role`
LIMIT 1

But it ends up with errors:
ER_MIX_OF_GROUP_FUNC_AND_FIELDS: In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'base.g.id'; this is incompatible with sql_mode=only_full_group_by
The problem seems to be solved if I add GROUP BY `g`.`id`, but I don't understand why grouping is needed?
The table structure itself is DBDesigner .
Thanks in advance)

Answer the question

In order to leave comments, you need to log in

1 answer(s)
R
Rsa97, 2016-09-03
@Negezor

SELECT `u`.`gid` AS `group_id`,
       `g`.`name` AS `group_name`,
       GROUP_CONCAT(DISTINCT `r`.`name` SEPARATOR ",") AS roles,
  FROM (
    SELECT `u`.`user` AS `user`, `u`.`gid` AS `gid`, `ru`.`id` AS `role` 
      FROM `users` AS `u`
      LEFT JOIN `roles_users` AS `ru` 
        ON `u`.`user` = :user_id AND `ru`.`user` = `u`.`user`
    UNION SELECT `u`.`user` AS `user`, `u`.`gid` AS `gid`, `rg`.`id` AS `role` 
      FROM `users` AS `u`
      LEFT JOIN `roles_groups` AS `rg` 
        ON `u`.`user` = :user_id AND `rg`.`gid` = `u`.`gid` 
  ) AS `ur`  
  INNER JOIN `groups` AS `g` ON `g`.`id` = `ur`.`gid`
  LEFT JOIN `roles` AS `r` ON `r`.`id` = `ur`.`role`

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question