开发者

PHP rand query results - check so the new randomized query is not the same as previous

开发者 https://www.devze.com 2023-03-28 02:09 出处:网络
my PHP code looks like this right now: $query = mysql_query(\"SELECT * FROM `questions` WHERE `id` = \'$id\' ORDER BY RAND()\") or die(mysql_error());

my PHP code looks like this right now:

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

$question = $cmd['question'];

Right now, the questions just get randomized - which is fine - but sometimes the same question appears again, and I don't want that. I assume you can fix this with a session. But how? If someone can fix the code, 开发者_如何学GoI'd really appreciate.


Perhaps something like this:

$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.

I don't know how the rest of the program works, so the logic you need may be a little different, but I'm sure that sort of query is what you're looking for.


This should do what you need:

$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
}


You can store the ID of all previous asked questions inside your session:

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

You can then extend your query to exclude all asked questions:

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

And finally after querying a new question, add it to the session:

$_SESSION['QuestionAsked'][] = $currentQuestionId;
0

精彩评论

暂无评论...
验证码 换一张
取 消