Получить родительско-дочернюю иерархию со всеми узлами в формате json или любом другом формате, используя postgres - PullRequest
0 голосов
/ 23 марта 2020

Данные таблицы:

id  name    ob_name parent  level   type_id type_name
1   Objective 1 ob Objective 1 name [NULL]  0   1   Objective
11  Objective 3 Ob objective 3 name [NULL]  0   1   Objective
13  Objective 4 ob Objective 4  [NULL]  0   1   Objective
2   Key Result 1-1  Kr Key result 1-1   1   1   2   Keyresult
3   Kwyresult 1-2   Kr Key result 1-2 name  1   1   2   Keyresult
9   Key result 2    Kr Key result 2 name    [NULL]  1   2   Keyresult
12  Key Result 3    Kr Key result 3 name    11  1   2   Keyresult
4   Initiative 1-1-1    In Initiative 1-1-1 name    2   2   3   Initiative
5   Inititative 1-1-2   In Initiative 1-1-2 name    2   2   3   Initiative
6   Initiative 1-1-3    In Initiative 1-1-3 name    2   2   3   Initiative
7   Inititative 1-2-1   In Initiative 1-2-1 name    3   2   3   Initiative
8   Inititative 1-2-2   In Initiative 1-2-2 name    3   2   3   Initiative
10  Initiative 2    In Initiative 2 name    9   2   3   Initiative
14  Initiative 4    In Initiative 4 name    13  2   3   Initiative
15  Initiative Standalone   In initiative Standalone name   [NULL]  2   3   Initiative

Мне нужен ожидаемый вывод json

{
  Objectives: [
    {
      id: 1,
      name: 'Objective 1',
      ob_name: 'ob Objective 1 name',
      parent: null,
      level: 0,
      type_id: 1,
      type_name: 'Objective',
      Keyresults: [
        {
          id: 2,
          name: 'Key Result 1-1',
          ob_name: 'Kr Key result 1-1',
          parent: 1,
          level: 1,
          type_id: 2,
          type_name: 'Keyresult',
          Initiative: [
            {
              id: 4,
              name: 'Initiative 1-1-1',
              ob_name: 'In Initiative 1-1-1 name',
              parent: 2,
              level: 2,
              type_id: 3,
              type_name: 'Initiative'
            },
            {
              id: 5,
              name: 'Inititative 1-1-2',
              ob_name: 'In Initiative 1-1-2 name',
              parent: 2,
              level: 2,
              type_id: 3,
              type_name: 'Initiative'
            },
            {
              id: 6,
              name: 'Initiative 1-1-3',
              ob_name: 'In Initiative 1-1-3 name',
              parent: 2,
              level: 2,
              type_id: 3,
              type_name: 'Initiative'
            }
          ]
        },
        {
          id: 3,
          name: 'Kwyresult 1-2',
          ob_name: 'Kr Key result 1-2 name',
          parent: 1,
          level: 1,
          type_id: 2,
          type_name: 'Keyresult',
          Initiative: [
            {
              id: 7,
              name: 'Inititative 1-2-1',
              ob_name: 'In Initiative 1-2-1 name',
              parent: 3,
              level: 2,
              type_id: 3,
              type_name: 'Initiative'
            },
            {
              id: 8,
              name: 'Inititative 1-2-2',
              ob_name: 'In Initiative 1-2-2 name',
              parent: 3,
              level: 2,
              type_id: 3,
              type_name: 'Initiative'
            }
          ]
        }
      ]
    },
    {
      id: null,
      name: null,
      ob_name: null,
      parent: null,
      level: 0,
      type_id: 1,
      type_name: 'Objective',
      Keyresults: [
        {
          id: 9,
          name: 'Key result 2',
          ob_name: 'Kr Key result 2 name',
          parent: null,
          level: 1,
          type_id: 2,
          type_name: 'Keyresult',
          Initiative: [
            {
              id: 10,
              name: 'Initiative 2',
              ob_name: 'In Initiative 2 name',
              parent: 9,
              level: 2,
              type_id: 3,
              type_name: 'Initiative'
            }
          ]
        }
      ]
    },
    {
      id: 11,
      name: 'Objective 3',
      ob_name: 'Ob objective 3 name',
      parent: null,
      level: 0,
      type_id: 1,
      type_name: 'Objective',
      Keyresults: [
        {
          id: 12,
          name: 'Key Result 3',
          ob_name: 'Kr Key result 3 name',
          parent: 11,
          level: 1,
          type_id: 2,
          type_name: 'Keyresult',
          Initiative: [
            {
              id: null,
              name: null,
              ob_name: null,
              parent: 12,
              level: 2,
              type_id: 3,
              type_name: 'Initiative'
            }
          ]
        }
      ]
    },
    ,
    {
      id: 13,
      name: 'Objective 4',
      ob_name: 'Ob objective 4',
      parent: null,
      level: 0,
      type_id: 1,
      type_name: 'Objective',
      Keyresults: [
        {
          id: null,
          name: null,
          ob_name: null,
          parent: 13,
          level: 1,
          type_id: 2,
          type_name: 'Keyresult',
          Initiative: [
            {
              id: 14,
              name: 'Initiative 4',
              ob_name: 'In Initiative 4 name',
              parent: 13,
              level: 2,
              type_id: 3,
              type_name: 'Initiative'
            }
          ]
        }
      ]
    },
    ,
    {
      id: null,
      name: null,
      ob_name: null,
      parent: null,
      level: 0,
      type_id: 1,
      type_name: 'Objective',
      Keyresults: [
        {
          id: null,
          name: null,
          ob_name: null,
          parent: null,
          level: 1,
          type_id: 2,
          type_name: 'Keyresult',
          Initiative: [
            {
              id: 15,
              name: 'Initiative Standalone',
              ob_name: 'In initiative Standalone name',
              parent: null,
              level: 2,
              type_id: 3,
              type_name: 'Initiative'
            }
          ]
        }
      ]
    }
  ]
}

Я знаю, это странное требование. в моем приложении нет промежуточного программного обеспечения для манипулирования. ожидаемый json используется для привязки вида сетки. требование, если 'type_id' 3 типа. он показывает как 3 столбца в gridview, предположим, что родительские и дочерние отношения верны, он показывает тот же heirachay, иногда родительское отношение отсутствует, показывается как пустой узел в иерархии слоев.

, пожалуйста, дайте мне знать, есть ли какая-либо опция в postgress выглядят так же или любые другие варианты

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