Задать вопрос
@Vecherok

Как выбрать вопросы на страницу из базы?

Пишу что-то вроде тестирования для студентов.
Студент заходит на главную страницу и указывает свои данные и выбирает указанную тему, после чего его перенаправляет непосредственно к тесту. После того как студент ответит на определенное количество вопросов, система поставит ему оценку.

Столкнулся с проблемой выборки вопросов на страницу. Надо выводить не более трех с четырьмя или тремя вариантами.

Имя такую структуру таблицы, думаю она не оптимальная:

CREATE TABLE IF NOT EXISTS `#_vopros` (
  `num` int(10) NOT NULL AUTO_INCREMENT,
  `vopros` text,
  `otvet` int(1) DEFAULT NULL,
  `otvet1` varchar(200) DEFAULT NULL,
  `otvet2` varchar(200) DEFAULT NULL,
  `otvet3` varchar(200) DEFAULT NULL,
  `otvet4` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`num`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

INSERT INTO `#vopros` (`num`, `vopros`, `otvet`, `otvet1`, `otvet2`, `otvet3`, `otvet4`) VALUES
(1, 'Какая птица ''''приносит'''' детей?', 2, 'Ворона', 'Аист', 'Курица', 'Дятел')
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Тебе надо нормализовать таблицу. Эти 2 сущности нужно разделить на 3 таблицы.
  • 1. Таблица вопросов(voprosi). {vopros_num, vopros_text}
  • 2. Таблица ответов(otveti). {otvet_num, vopros_num, otvet_text}
  • 3. Таблица правильных ответов(pravilnie_otveti) {vopros_num, otvet_num}


Так ты можешь связать с вопросом сколько угодно ответов, о потом можешь сделать выборку
SELECT *
FROM `voprosi`
WHERE vopros_num IN
    (SELECT vopros_num
     FROM otveti
     WHERE COUNT(otvet_num) = 3
       OR COUNT(otvet_num) = 4
     GROUP BY vopros_num)

Дальше уже можешь по номеру вопроса выводить отдельным запросом ответы, и отдельным запросом номер правильного ответа
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dzheka3d
@dzheka3d
Создайте вторую таблицу где будете хранить варианты ответов с полем id вопроса, а в первой только вопрос.

Можно хранить json массив в одном поле "варианты ответов".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы