GROUP_CONCAT сортировка на основе вторичной таблицы - PullRequest
1 голос
/ 05 марта 2019

Есть ли способ сортировки GROUP_CONCAT на основе вторичной таблицы?

У меня есть 3 настройки таблиц, аналогичные:

users          usersPrivilegeGroups     privilegeGroupsPriority
-----------    ---------------------    -----------------------
userid PK      groupName FK             groupName PK
username       userid FK                priority int
               active

Используя следующее, я получаю соответствующих пользователей:данные со связанными usersPrivilegeGroups.groupName, объединенными в одно поле:

SELECT
    users.*,
    GROUP_CONCAT(privList.groupName separator ',') AS privilegeGroups
FROM users
    LEFT JOIN usersPrivilegeGroups privList
    ON (privList.userid = users.userid AND privList.active = 1)
WHERE users.userid = ...

Есть ли способ сортировки совпадающих групп (privGroups) по privilegeGroupsPriority.priority в порядке возрастания?

1 Ответ

2 голосов
/ 05 марта 2019

Вам нужно JOIN таблицу приоритетов и выполнить ORDER BY значение приоритета внутри GROUP_CONCAT:

SELECT
    users.*,
    GROUP_CONCAT(privList.groupName separator ',' 
                 ORDER BY priority.priority ) AS privilegeGroups
FROM users

    LEFT JOIN usersPrivilegeGroups privList
    ON (privList.userid = users.userid AND privList.active = 1)

    LEFT JOIN privilegeGroupsPriority priority
    ON privList.groupName = priority.groupName

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