Просто думал, что укажу.
Ваш дизайн базы данных ужасен.
Это не будет хорошо масштабироваться, и на самом деле я не думаю, что это будет на самом деле. работа.
Я бы так и сделал
Три стола
sets
=> идентификатор, имя
questions
=> id, set_id, вопрос
answers
=> id, set_id, question_id, ответ, баллы
Обратите внимание, что в моем приведенном выше примере я делаю это на один шаг вперед, а не каждому ответу, являющемуся истинным или ложным, у него может быть назначенное значение балла.
следовательно, ответ, который вы посчитали полуправильным, можно получить 5 баллов, где в качестве правильного ответа можно дать 10 баллов, он также работает как логическое значение «истина», просто правильный ответ равен 1 баллу, а неправильный ответ - 0 баллов.
Во всяком случае.
Имея в виду приведенный выше дизайн таблицы.
Вы могли бы сделать
$this->db->select('s.id as set, s.name as name, q.id as qid, q.question as qu, a.id as aid, a.answer as an, a.points as p')
->from('sets s')
->join('questions q', 'q.set_id = s.id')
->join('answers a', 's.set_id = s.id')
->where('s.id', 'SET ID');
$questions = $this->db->get();
$set = array('questions' => array());
foreach($questions as $s){
$set['id'] = $s->set;
$set['name'] = $s->name;
$set['questions'][$s->qid]['id'] = $q->qid;
$set['questions'][$s->qid]['question'] = $q->qu;
if(!isset($set['questions'][$s->qid]['answers']))
$set['questions'][$s->qid]['answers'] = array();
$set['questions'][$s->qid]['answers'][] = array(
'id' => $q->aid,
'answer' => $q->an',
'points' => $q->p
);
}
Итак, вы получите массив, который будет выглядеть примерно так:
array(
'id' => 1,
'name' => 'My first quiz',
'questions' = array(
array(
'id' => 1,
'question' => 'What is 1+1+1?',
'answers' => array(
array(
'id' => 1,
'answer' => 1,
'points' => 0
),
array(
'id' => 2,
'answer' => 2,
'points' => 0
),
array(
'id' => 3,
'answer' => 3,
'points' => 1
)
)
),
array(
'id' => 2,
'question' => 'What is 2+2+2?',
'answers' => array(
array(
'id' => 4,
'answer' => 6,
'points' => 1
),
array(
'id' => 5,
'answer' => 2,
'points' => 0
),
array(
'id' => 6,
'answer' => 3,
'points' => 0
)
)
)
)
);
Тогда вы можете сделать.
echo '<h2>'.$set['name'].'</h2>';
foreach($set['questions'] as $q){
echo '<div class="question">';
echo '<h3>'.$q['question'].'</h3>';
echo '<div class="answers">';
foreach($q['answers'] as $a){
echo '<label for="a'.$a['id'].'">'.$a['answer'].'<input type="checkbox value="'.$a['id'].'" name="q'.$q['id'].'" /></label><br />';
}
echo '</div>';
echo '</div>';
}