Je kunt een multidimensionale array niet puur met mysql ophalen (tenminste voor zover ik weet). Je zult wat php-verwerking moeten doen. Dit klinkt niet zo gek.
Werk eerst uw zoekopdracht bij om tegelijkertijd antwoorden te selecteren door deel te nemen aan quiz_answers
op quiz_questions
met behulp van de vraag-ID. Dan, in uw lus:
$quiz = array();
while ($row = mysql_fetch_assoc($result)) {
// you don't need to check num_rows
// fetch_assoc returns false after the last row, so you can do this
// which is cleaner
if (!isset($quiz[$row['question_id'])) {
$quiz[$row['question_id']] = array(
'question' => $row['question_text']
, 'answers' => array()
);
}
$quiz[$row['question_id']]['answers'][] = $row['answer_text'];
}
$full = json_encode(array('questions' => $quiz'));
Dit geeft je de array die je wilt nadat het json-gecodeerd is.
Houd er rekening mee dat u de vraagtekst/-ID één keer per antwoord zult selecteren, wat inefficiënt is. U kunt GROUP_CONCAT
. gebruiken op de antwoorden, maar het bovenstaande werkt nog steeds bijna identiek, je hoeft alleen de antwoordreeks te splitsen.
Ik raad je ook aan om PDO
. te gebruiken of een andere wrapper over mysql_*
.