Вопрос был долгий, поэтому мне пришлось сократить его.
Во всяком случае, в настоящее время у меня есть следующая таблица со следующими результатами.
Я делаю следующее:
Это мой текущий запрос:
$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" ] }
С чем я теперь могу работать.