PHP rand query results - проверьте, чтобы новый рандомизированный запрос не совпадал с предыдущим - PullRequest
0 голосов
/ 13 августа 2011

мой PHP-код сейчас выглядит следующим образом:

$query = mysql_query("SELECT * FROM `questions` WHERE `id` = '$id' ORDER BY RAND()") or die(mysql_error());
$cmd = mysql_fetch_assoc($query);

$question = $cmd['question'];

Прямо сейчас вопросы просто рандомизируются - что хорошо - но иногда тот же вопрос появляется снова, и я этого не хочу.Я полагаю, вы можете исправить это с помощью сеанса.Но как?Если кто-то сможет исправить код, я буду очень признателен.

Ответы [ 3 ]

1 голос
/ 13 августа 2011

Возможно что-то вроде этого:

$query = "SELECT * FROM `questions` WHERE `id` = `$id` AND `id` NOT IN (";
$query .= implode(', ', array_keys($_SESSION['questions']));
$query .= ') ORDER BY RAND()';
mysql_query($query) or die(mysql_error());

// Here add the returned questions to the $_SESSION['questions'] array so they would not appear again.

Я не знаю, как работает остальная часть программы, поэтому логика, которая вам нужна, может немного отличаться, но я уверен, что именно такой запрос вам нужен.

0 голосов
/ 13 августа 2011

Вы можете сохранить идентификатор всех предыдущих заданных вопросов в вашей сессии:

if (!isset($_SESSION['QuestionAsked']))
{
    $_SESSION['QuestionAsked'] = array();
}

Затем вы можете расширить свой запрос, чтобы исключить все задаваемые вопросы:

$query = 'SELECT * FROM `questions`';
if ($_SESSION['QuestionAsked'])
{
    $askedIds = implode(',', $_SESSION['QuestionAsked']);
    $query .= sprintf(' WHERE `id` NOT IN (%s)', $askedIds);
}
$query .= ' ORDER BY RAND()';

И, наконец, после запроса нового вопроса, добавьте его в сеанс:

$_SESSION['QuestionAsked'][] = $currentQuestionId;
0 голосов
/ 13 августа 2011

Это должно сделать то, что вам нужно:

$query = mysql_query("SELECT * FROM `questions` WHERE `id` = '$id' ORDER BY RAND()") or die(mysql_error());
$question = null;
while ($cmd = mysql_fetch_assoc($query)) {
    if (array_search($cmd['question'], $_SESSION['asked']))
        continue;
    $question = $cmd['question'];
    $_SESSION['asked'][] = $question;
    break;
}
if (!$question) {
    // No unique questions found.
} else {
    // $question will be unique here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...