Как получить данные из MySQL в родительском дочернем формате в PHP? - PullRequest
2 голосов
/ 17 октября 2019

У меня есть две таблицы,

question                  question choices

id question             id  question_id  choice
1    aaaa                1      1         ccc
2    bbbb                2      1         ddd
                         3      1         eee

Я получаю данные, используя запрос left join, используя php, когда я печатаю данные, они выглядят так:

Array
(
    [id] => 1
    [question] => aaa
    [question_id] => 1
    [choice] => ccc
)
Array
(
    [id] => 1
    [question] => aaa
    [question_id] => 1
    [choice] => ddd
)
Array
(
    [id] => 1
    [question] => aaa
    [question_id] => 1
    [choice] => eee
)

Но яхочу отобразить что-то вроде

Array
    (
        [id] => 1
        [question] => aaa,
           array
              (
                [question_id] => 1
                [choice] => ccc
              )
           array
              (
                [question_id] => 1
                [choice] => ddd
              )
    )

Я хочу отобразить данные дочерней таблицы внутри родительского элемента, чтобы я мог предотвратить повторение вопроса.

Как я могу сделать это, используя core php?

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Вам не нужно использовать запрос на соединение, просто выберите его отдельно.

    //$questions; $question_choices;
    $questions = array_column($questions,null,'id');
    foreach($question_choices as $question_choice){
        $questions[$question_choice["question_id"]][] = $question_choice;
    }
0 голосов
/ 17 октября 2019

Это просто. Вам нужно перебрать данные ответа и отформатировать их в соответствии с вашими потребностями. Вот пример с использованием предоставленного вами образца массива.

    $response_array = array(
  array
  (
      'id' => 1,
      'question' => 'aaa',
      'question_id' => 1,
      'choice' => 'ccc'
  ),
  array
  (
      'id' => 1,
      'question' => 'aaa',
      'question_id' => 1,
      'choice' => 'ddd'
  ),
  array
  (
      'id' => 1,
      'question' => 'aaa',
      'question_id' => 1,
      'choice' => 'eee'
  )
);
$result_array = array();
foreach ($response_array as $key => $value) {
    $result_array[$value['id']]['id'] = $value['id'];
    $result_array[$value['id']]['question'] = $value['question'];


    $result_array[$value['id']][] = array(
        'question_id' => $value['question_id'],
        'choice' => $value['choice']
    ); 
}

// it will print the array to check response
echo '<pre>';print_r($result_array);
...