не может быть вложенным json в postgres - PullRequest
0 голосов
/ 07 апреля 2020

Есть два вида: view1 и view2. view1 имеет элементы, относящиеся к каждому типу, а view2 содержит элементы, относящиеся к типу, и каждый тип относится к каждой группе.

Два отдельных представления и два отдельных вывода, нет необходимости объединять эти два представления.

Я пытался использовать jsonb_build_object и jsonb_agg, но не смог получить.

ожидаемый вывод от views1:

[
  {
    "userid": 1,
    "Name": "Alex",
    "types": [
      {
        "typeid": 1,
        "items": [
          {
            "itemid": 1,
            "itemname": "item"
          },
          {
            "itemid": 2,
            "itemname": "item"
          }
        ]
      },
      {
        "typeid": 2,
        "items": [
          {
            "itemid": 1,
            "itemname": "item"
          },
          {
            "itemid": 2,
            "itemname": "item"
          }
        ]
      }
    ]
  },
  {
    "userid": 2,
    "Name": "Al",
    "types": [
      {
        "typeid": 1,
        "items": [
          {
            "itemid": 1,
            "itemname": "item"
          },
          {
            "itemid": 2,
            "itemname": "item"
          }
        ]
      },
      {
        "typeid": 2,
        "items": [
          {
            "itemid": 1,
            "itemname": "item"
          },
          {
            "itemid": 2,
            "itemname": "item"
          }
        ]
      }
    ]
  }
]

ожидаемый результат от views2:

[{
    "userid": 1,
    "Name": "Alex",
    "groups":[{
      "groupid":1,
      "groupname":"name",
    "types": [{
        "typeid": 1,
        "items": [{
          "itemid":1,
          "itemname" : "item"
         }, {
           "itemid": 2,
           "itemname":"item"
        }]
    },{
        "typeid": 2,
        "items": [{
          "itemid":1,
          "itemname" : "item"
         }, {
           "itemid": 2,
           "itemname":"item"
        }]
    }]},{
      "groupid":2,
      "groupname":"name",
    "types": [{
        "typeid": 1,
        "items": [{
          "itemid":1,
          "itemname" : "item"
         }, {
           "itemid": 2,
           "itemname":"item"
        }]
    },{
        "typeid": 2,
        "items": [{
          "itemid":1,
          "itemname" : "item"
         }, {
           "itemid": 2,
           "itemname":"item"
        }]
    }]}
    ]
}]

view1:

+--------+--------+--------+----------+----------+----------+
| userid | typeid | itemid | username | typename | itemname |
+--------+--------+--------+----------+----------+----------+
|      1 |      1 |      1 | sha      | type1    | item1    |
|      1 |      1 |      2 | sha      | type1    | item2    |
|      1 |      2 |      1 | sha      | type2    | item1    |
|      1 |      2 |      2 | sha      | type2    | item2    |
+--------+--------+--------+----------+----------+----------+

выше view1 имеет два типа, и каждый тип имеет два элементы для пользователя.

view2:

+--------+---------+--------+--------+----------+-----------+----------+----------+
| userid | groupid | typeid | itemid | username | groupname | typename | itemname |
+--------+---------+--------+--------+----------+-----------+----------+----------+
|      1 |       1 |      1 |      1 | sha      | group1    | type1    | item1    |
|      1 |       1 |      1 |      2 | sha      | group1    | type1    | item2    |
|      1 |       1 |      2 |      1 | sha      | group1    | type2    | item1    |
|      1 |       1 |      2 |      2 | sha      | group1    | type2    | item2    |
|      1 |       2 |      1 |      1 | sha      | group2    | type1    | item1    |
|      1 |       2 |      1 |      2 | sha      | group2    | type1    | item2    |
|      1 |       2 |      2 |      1 | sha      | group2    | type2    | item1    |
|      1 |       2 |      2 |      2 | sha      | group2    | type2    | item2    |
+--------+---------+--------+--------+----------+-----------+----------+----------+

выше view2 имеет две группы, и у каждой группы есть два типа, и у каждого типа есть два элемента для пользователя, это как группа по идентификатору пользователя, groupid, typeid, itemid

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