MySQL, как присоединить таблицу в качестве подмассива? - PullRequest
0 голосов
/ 30 сентября 2019

Итак, у меня есть две таблицы, я хочу выполнить запрос, который объединит таблицу Receipt и таблицу Receipt_Item так, чтобы таблица Receipt_Item представляла собой подрешетку, как показано ниже.

Receipts - 

| receipt_id | phone      | amount | status  |
|------------|------------|--------|---------|
| 1          | 7777777777 | 5682   | Success |
| 2          | 8888888888 | 4586   | Success |
| 3          | 5555555555 | 7589   | Success |

Receipt_Item -

| receipt_id | item_id | quantity | price |
|------------|---------|----------|-------|
| 1          | 1       | 23       | 5682  |
| 1          | 2       | 30       | 5682  |
| 2          | 1       | 10       | 7589  |
| 3          | 1       | 23       | 4355  |
| 3          | 2       | 41       | 3665  |

Ожидаемый результат -

[
    {
        "receipt_id": 1,
        "phone": "7777777777",
        "amount": "5682",
        "status": "Success",
        "receipt_item" : [
            {
              "receipt_id" : 1,
              "item_id" : 1,
              "quantity" : 23,
              "price" : 5682
            },
            {
              "receipt_id" : 1,
              "item_id" : 2,
              "quantity" : 30,
              "price" : 5682
            }

        ]
    },
    {
        "receipt_id": 2,
        "phone": "8888888888",
        "amount": "4586",
        "status": "Success",
        "receipt_item" : [
            {
              "receipt_id" : 2,
              "item_id" : 1,
              "quantity" : 10,
              "price" : 7589
            }
        ]
    },
    {
        "receipt_id": 3,
        "phone": "5555555555",
        "amount": "7589",
        "status": "Success",
        "receipt_item" : [
            {
              "receipt_id" : 3,
              "item_id" : 1,
              "quantity" : 23,
              "price" : 4355
            },
            {
              "receipt_id" : 3,
              "item_id" : 2,
              "quantity" : 41,
              "price" : 3665
            }

        ]
    }
]

Заранее спасибо.

1 Ответ

0 голосов
/ 01 октября 2019

Это можно сделать, используя функции JSON_ARRAYAGG и JSON_OBJECT . Я думаю, что это то, что вам нужно:

SELECT JSON_ARRAYAGG(JSON_OBJECT('receipt_id', R.receipt_id, 'phone', R.phone, 'amount', R.amount, 'status', R.status, 'receipt_Item', I.Item))
from Receipts R
LEFT JOIN 
(SELECT receipt_id, JSON_ARRAYAGG(JSON_OBJECT('receipt_id', receipt_id, 'item_id', item_id, 'quantity', quantity, 'price', price))  AS Item from ReceiptItem Group BY receipt_id) I ON R.receipt_id = I.receipt_id

Образец DBFiddler можно найти здесь

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