SQL многие ко многим JSON - PullRequest
       2

SQL многие ко многим JSON

0 голосов
/ 13 декабря 2018

Здесь много похожих вопросов по этому поводу, но я до сих пор не нашел, как мне построить запрос в этом простейшем случае:

3 таблицы: Users, Groups, User_Groups;

id | name      id | title        user_id | group_id 
-----------    -----------       ------------------
1  | Bob       1  | Developers         1 |       2
2  | Jimmy     2  | Admins             1 |       1
3  | Jack                              2 |       1
                                       3 |       2

Я хочу включить дополнительное поле users в качестве массива объектов при получении всех групп:

id  | title       | users
------------------------------------------------------------------
  1 | Developers  | [{"id": 1, "name": "Bob"}, {"id": 2, "name": "Jimmy"}]
  2 | Admins      | [{"id": 1, "name": "Bob"}, {"id": 3, "name": "Jack"}]

1 Ответ

0 голосов
/ 13 декабря 2018

Это должно работать на MySQL 5.7 или более поздней версии:

SELECT g.id, g.title,
  CONCAT('[',
    GROUP_CONCAT(
      JSON_OBJECT('id', u.id, 'name', u.name)
    ),
  ']') AS users
FROM Groups g
JOIN User_Groups ug ON ug.group_id = g.id
JOIN Users u ON ug.user_id = u.id
GROUP BY g.id

ОК. Я протестировал его в песочнице MySQL 5.7.Я получил такой вывод:

+----+------------+-------------------------------------------------------+
| id | title      | users                                                 |
+----+------------+-------------------------------------------------------+
|  1 | Developers | [{"id": 1, "name": "Bob"},{"id": 2, "name": "Jimmy"}] |
|  2 | Admins     | [{"id": 1, "name": "Bob"},{"id": 3, "name": "Jack"}]  |
+----+------------+-------------------------------------------------------+

PS: Если кто-нибудь спросит: «Но как нам сделать это на 5.6 без функций JSON?»Я бы предложил вам загрузить неформатированные данные в ваше приложение и отформатировать JSON с помощью кода.Не стоит тратить время на то, чтобы понять, как форматировать JSON, используя только выражения SQL.

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