Intereting Posts

Возвращает объект JSON из запроса MySQL с помощью json_encode

Вопрос был долгий, поэтому мне пришлось сократить его.

Во всяком случае, в настоящее время у меня есть следующая таблица со следующими результатами.

Я делаю следующее:

  1. Запросить все ответы, связанные с одним вопросом
  2. Кодирование его после хранения в массив

Это мой текущий запрос:

$stmt = "SELECT questions.question_text, answers.answer_text FROM questions, answers, test WHERE questions.question_id = answers.question_id AND questions.test_id =1"; $result = $connection->query($stmt); 

Что дает мне это:

введите описание изображения здесь

Это PHP:

 $encode = array(); while($row = mysqli_fetch_assoc($result)) { $encode[] = $row; } echo json_encode($encode); 

Что дает мне этот результат:

 [ { "question_text": "What is HTML?", "answer_text": "HTML is a Hypertext Markup Language" }, { "question_text": "What is HTML?", "answer_text": "HTML is a Hypertext Markup Language" }, { "question_text": "What is HTML?", "answer_text": "HTML is a food" }, { "question_text": "What is HTML?", "answer_text": "HTML is a food" }, { "question_text": "What is HTML?", "answer_text": "HTML is an Asynchronous language" }, { "question_text": "What is HTML?", "answer_text": "HTML is an Asynchronous language" }, { "question_text": "What is HTML?", "answer_text": "HTML is a styling language" }, { "question_text": "What is HTML?", "answer_text": "HTML is a styling language" } ] 

Это желаемый результат с помощью json_encode:

 "What is HTML?": { "1": "HTML is a Hypertext Markup Language", "2": "HTML is a food", "3": "HTML is an Asynchronous language", "4": "HTML is a styling language" } 

То, что я сейчас получаю, – это несколько отдельных объектов с одним из ответов внутри них, но всегда ответ, связанный с ним. Я хочу создать единый объект со всеми ответами в нем и вопросом, представляющим объект. Я действительно надеюсь, что это имеет смысл. Я, вероятно, ушел в своей логике, поэтому, пожалуйста, простите меня за это.

Я пытался играть с циклом while, но я не мог заставить его работать. Может ли кто-нибудь привести меня к правильному пути к достижению моего желаемого результата?

Спасибо.

Похоже, просто изменить массив, который вы строите …

 $encode = array(); while($row = mysqli_fetch_assoc($result)) { $encode[$row['question _text']][] = $row['answer_text']; } echo json_encode($encode); 

Измените этот бит:

 $encode = array(); while($row = mysqli_fetch_assoc($result)) { $encode[] = $row; } 

Для (начиная с 1 я добавил $ i вместо того, чтобы просто довести его до конца массива кодирования):

 $encode = array(); $i = 1; while($row = mysqli_fetch_assoc($result)) { $encode[$row['question_text']][$i] = $row['answer_text']; $i++; } 

И вы должны быть в порядке.

Вам не нужно использовать PHP для дополнительной обработки.

Просто используйте mysql Group By

 $stmt = "SELECT questions.question_text, answers.answer_text FROM questions, answers, test WHERE questions.question_id = answers.question_id AND questions.test_id =1 GROUP BY questions.question_id;" 

Я изменил свой запрос на следующее:

 SELECT DISTINCT questions.question_text, answers.answer_text FROM questions, answers, test WHERE questions.question_id = answers.question_id AND questions.test_id = 

Цикл while:

 while($row = mysqli_fetch_assoc($result)) { $encode[$row['question_text']][] = $row['answer_text']; } 

Это дало мне следующее:

 { "What is HTML?": [ "HTML is a Hypertext Markup Language", "HTML is a food", "HTML is an Asynchronous language", "HTML is a styling language" ] } 

С чем я теперь могу работать.