PHP从数据库中获取唯一的随机值

时间:2011-07-04 23:42:46

标签: php mysql random unique

我一直在使用PHP测验程序,我从数据库中获取独特的随机值时有点迷失。目前这是我的脚本。

<?php $num = 1;
    $sql = "SELECT * FROM questions ORDER BY RAND() LIMIT ".$num;
    $sql_exec = mysql_query($sql, $connection);
    if(isset($_POST['start']) || isset($_SESSION['xy'])){
        while($row = mysql_fetch_array($sql_exec)){
            if(!in_array($row['qid'], $_SESSION['xy'])){
                echo $row['qid']." -".$row['question']."<br />";
                if(isset($_POST['num'])){
                    $_SESSION['xy'][] .=  $row['qid'];
                }
            }else{
                // WHAT WILL I PUT HERE
            }
        }
    } ?>

<form action="<?php $_SERVER[PHP_SELF]; ?>" method="post">
    <input type="hidden" name="num" value="1" />
    <input type="submit" name="start" value="Start" <?php if(isset($_POST['start']) || isset($_SESSION['xy'])) echo "disabled"; ?> />
    <input type="submit" name="submit" value="Continue" />
    <input type="submit" name="destroy" value="Destroy" />
</form>

我将每行的id放在会话数组中,以便我可以记录所有先前的问题和 如果新问题已经使用in_array进行询问,我可以进行比较。

问题是如果新的获取数据已经在数组中,程序会停止,因为我仍然没有其他值,

[想法-01] 我正在考虑在else上添加一个新的select语句,但我知道这是错误的,因为它在一个循环内,并且无法保证该值是唯一的。

[想法-02] 使用我在会话中的行ID的数组记录,我想在上面的选择中放置where条件

WHERE qid != $_SESSION['xy']

问题是我必须循环此会话以将每个值与语句进行比较。问题还有20个问题,将来可以延长。

1 个答案:

答案 0 :(得分:1)

我认为你要找的是mysql的in comparison function

$mysql_query="SELECT * FROM questions WHERE question NOT IN (".implode(",",$_SESSION["anwsered_questions"]).") ORDER BY RAND();";

确保$ _SESSION [“anwsered_question”]中只存储数字值,否则此查询将对MySQL注入造成攻击

另外:不要使用ORDER BY RAND(),有关详细信息,请参阅http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/