生成一对多关系的SQL查询

时间:2018-07-31 04:29:33

标签: mysql laravel

Actual Result: 
[ 
    { id: 1, title: 'Test Tournament #$1', d_title: 'Rendering Vue Slots content to an iframe'},
    { id: 1, title: 'Test Tournament #$1', d_title: 'Example' },
    { id: 1, title: 'Test Tournament #$1', d_title: 'Example' },
    { id: 1, title: 'Test Tournament #$1', d_title: 'asdfasdf' },
    { id: 2, title: 'Test Tournament #$2', d_title: 'Rendering Vue Slots content to an iframe'},
    { id: 2, title: 'Test Tournament #$2', d_title: 'Example' },
    { id: 2, title: 'Test Tournament #$2', d_title: 'Example' },
    { id: 2, title: 'Test Tournament #$2', d_title: 'asdfasdf' } 
]

Expected Result: 
[ 
    { id: 1, title: 'Test Tournament #$1', detail: 
        [
             { d_title: 'Rendering Vue Slots content to an iframe'},
             { d_title: 'Example'},
             { d_title: 'Example'},
             { d_title: 'asdfasdf'},
        ]
    },
    { id: 2, title: 'Test Tournament #$2', detail: 
        [
              { d_title: 'Rendering Vue Slots content to an iframe'},
              { d_title: 'Example'},
              { d_title: 'Example'},
              { d_title: 'asdfasdf'},
        ]
    }
]

如何使用SQL查询获取“预期结果”?

在Laravel中,我们可以通过使用与表的关系来获取它,但是如何通过纯SQL查询获取它呢?

2 个答案:

答案 0 :(得分:1)

您无法直接获得此结果,需要手动进行

1-首先获取平铺和ID,然后循环播放。并运行第二个查询,该查询带来d_title。通过这种方式,您可以获得所需的输出格式。

2-另一种方法是按顺序获取所有必需的数据,然后将其循环并制成所需的输出格式。

laravel也采用第一种方法来做到这一点。现在由您决定要做什么。

答案 1 :(得分:0)

如果您的数组是这样

$ActualResult = 
[ 
    { id: 1, title: 'Test Tournament #$1', d_title: 'Rendering Vue Slots content to an iframe'},
    { id: 1, title: 'Test Tournament #$1', d_title: 'Example' },
    { id: 1, title: 'Test Tournament #$1', d_title: 'Example' },
    { id: 1, title: 'Test Tournament #$1', d_title: 'asdfasdf' },
    { id: 2, title: 'Test Tournament #$2', d_title: 'Rendering Vue Slots content to an iframe'},
    { id: 2, title: 'Test Tournament #$2', d_title: 'Example' },
    { id: 2, title: 'Test Tournament #$2', d_title: 'Example' },
    { id: 2, title: 'Test Tournament #$2', d_title: 'asdfasdf' } 
];

使用此foreach

    $response = [];
    foreach($ActualResult as $result)
    {
      $response[$result['id']][$result['title']] = $result['d_title'];
    }
   dd($response);