Surzhikov
@Surzhikov
Разработчик

Как сделать join из другой таблицы в виде JSON массива?

Добрый день!
В новом mysql 5.7 есть функции для работы с JSON.
Подскажите, можно ли сделать такой запрос и если можно, то как?
Две табилцы: пользователи (users) и платежи (payments), связанные payments.user_id. Нужно вывести таблицу пользователей, чтобы справа добавилась колонка, содержащая JSON массив платежей пользователя.

users
-----------
| id | name |
 -----------
|  1 | Иван |
 -----------
|  2 | Петр |
 -----------


payments
------------------------------
| id | user_id | summ | status |
 ------------------------------
|  1 |       1 |  100 |      1 |
 ------------------------------
|  2 |       1 |  200 |      0 |
 ------------------------------
|  3 |       1 |  100 |      0 |
 ------------------------------
|  4 |       1 |  140 |      1 |
 ------------------------------
|  5 |       2 |  300 |      1 |
 ------------------------------
|  6 |       2 |  500 |      0 |
 ------------------------------


users_with_payments
------------------------------------------------
| id | name | payments_json                      |
 ------------------------------------------------
|  1 | Иван | [{"id":1, "summ":100, "status":1}, |
|    |      | {"id":2, "summ":200, "status":0},  |
|    |      | {"id":3, "summ":100, "status":0},  |
|    |      | {"id":4, "summ":140, "status":1}]  |
 ------------------------------------------------
|  2 | Петр | [{"id":5, "summ":300, "status":1}  |
|    |      | {"id":6, "summ":500, "status":0}]  |
 ------------------------------------------------
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега SQL
Седой и строгий
select
  u.*,
  group_concat(json_object('id', p.id, 'summ', p.summ, 'status', p.status)) as payments_json
from user as u
inner join payments as p
  on u.id = p.user_id
group by u.id, u.name;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы