Двойной выбор с помощью RAND() в php

#php #mysql

#php #mysql

Вопрос:

Пожалуйста, мне нужна помощь с этой проблемой, с которой я столкнулся. Я создаю экзаменационную систему и использую функцию Rand () для выбора вопросов из таблицы «вопрос». Ответы пользователя также сохраняются в таблице «user_answer».

Теперь моя проблема заключается в том, что вопрос иногда выбирается дважды или трижды, поэтому мне нужен запрос, который проверит, что если на вопрос уже дан ответ в таблице «user_answer», он должен повторно выбрать другой вопрос из таблицы «вопрос».

Комментарии:

1. Какой код вы используете сейчас?

2. Итак, нет кода. Хорошо, у вас есть то, что может быть «волшебным» ответом ниже; спросите их. Если это не сработает, тогда угадайте, что? Да, ключевое слово здесь — «угадать», вокруг чего и вращается ваш вопрос.

Ответ №1:

Вы не можете исключить с помощью Rand() напрямую.

Если вы выполняете запрос из базы данных, вы можете добавить что-то вроде

 select *
from question q
left join user_answer ua on ua.question_id = q.id
where ua.id is null
group by q.id
  

Это попытается подключиться к ответу (ЛЮБОМУ ответу, вы, вероятно, захотите добавить в него некоторый пользовательский выбор) и только возвращает вопросы, в которых он ТЕРПИТ НЕУДАЧУ (ua.id равно нулю), чтобы сделать это.

Если вы не можете сделать это с помощью запроса и иметь все это в некотором массиве PHP, что вы могли бы сделать, это отслеживать доступные идентификаторы вопросов в массиве. Каждый раз, когда вы выбираете вопрос случайным образом, вы удаляете этот элемент (значение!) Из массива и переиндексируете массив (сохраняя значения, которые являются идентификаторами вопроса, и упорядочивая ключи от 0 до количества вопросов — 1).

Таким образом, вы можете снова выполнить rand(0, count($questionIds)), чтобы выбрать следующий.

Другим способом было бы использовать цикл и продолжать до тех пор, пока выбранный вопрос уже находится в массиве используемых вопросов.