Выбрать с несколькими результатами создания столбцов - PullRequest
1 голос
/ 27 марта 2019

У меня есть 2 таблицы [пользователь] и [пользовательские права]

[пользователь]

id      name
1       test1
2       test2

[группы пользователей]

id      name
1       member
1       admin
1       18
2       new
2       16

И я хотел получить этоРезультаты

id      name        group1      group2      group3
1       test1       member      admin       18
2       test2       new         18          null

Я пробовал это, но я думаю, что это неправильный путь

SELECT *,IF(rightname = 'Member', 'Member', NULL) as status
FROM user,userrights 
where user.iduser = userrights.iduser

с этим я получаю эти результаты

id      name        rights      member
1       test1       member      member
1       test1       admin       null
1       test1       18          null

Я также пробовал это

     SELECT user.iduser,GROUP_CONCAT(rightname) as groups FROM user,userrights where user.iduser = userrights.iduser GROUP BY iduser;

, поэтому я получаю гораздо лучший результат

id      groups
1       member,admin,18
2       new,16

, но я хотел, чтобы для каждой группы был новый столбец

1 Ответ

0 голосов
/ 27 марта 2019

Если вам действительно нужны отдельные столбцы, самый простой подход может быть синтаксическим анализом group_concat():

select u.id, u.name,
       substring_index(group_concat(ur.rightname order by ur.rightname), ',', 1) as right1,
       substring_index( substring_index(group_concat(ur.rightname order by ur.rightname), ',', 2), ',', -1) as right2,
       substring_index( substring_index(group_concat(ur.rightname order by ur.rightname), ',', 3), ',', -1) as right3
from user u join
     userrights ur
     on u.iduser = ur.iduser 
group by u.id, u.name;

Обратите внимание, что я также исправил синтаксис архаичного соединения и добавил псевдонимы таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...