随机数据列表,不重复MySQL中的记录

时间:2013-12-18 23:33:33

标签: php mysql sql random

它已经过了5个小时,我仍然试图将我的数据列为随机到我的页面。 我检查过很多样品。这是我在写下之前尝试过的。

db schema

--tblquestions--
id(int)
Question(varchar)
GroupId(int)

--tblhints--
id(int)
hint(varchar)
pic(varchar)
GroupId(int)

tblquestions.GroupId = tblhints.GroupId

tblquestions.Question 字段中,每条记录都有两个值。例如:

id(1) Question(America) GroupId(5)
id(2) Question(Germany) GroupId(5)

id(3) Question(Italy) GroupId(6)
id(4) Question(Ukraine) GroupId(6)

喜欢这个。

这是投票应用

我正在向用户提供一个提示和图片,有两个选项(tblquestions.Question)。 用户选择一个,问题一直持续到最后。

它必须随机加载。

我尝试过 order by group by 以及许多可能性。 什么都没有。

它的列表是随机的,但我的页面中总是有重复的记录。

尝试过的例子:

<?php
$sorusayisi = 57;
for ($i=1; $i < $sorusayisi ; $i++) { 

            // $soruId = array();
            $soruQues = array();
            $soruCevapId = array();

            $sqlSorular=mysql_query("SELECT * FROM tblquestions AS r1 
                JOIN (SELECT (RAND() * (SELECT MAX(id) FROM tblquestions)) AS id) AS r2 
                    WHERE r1.Id >= r2.Id");

            while($rsSorular = mysql_fetch_array($sqlSorular)) {

                $soruCevapId[] = $rsSorular["Id"];
                $soruQues[] = $rsSorular["Question"];
                $soruGrId = intval($rsSorular["GroupId"]);

            }

            $sHint = mysql_query("SELECT * FROM tblhints WHERE GroupId=".$soruGrId."");
            $rsHint = mysql_fetch_array($sHint);
                $soruHint = $rsHint["hint"];
                $soruPic = $rsHint["pic"];

            $sCevap = mysql_query("SELECT * FROM tblanswers WHERE GroupId=".$soruGrId."");
            $rsCevap = mysql_fetch_array($sCevap);
                $cevapId = $rsCevap["Answer"];
                // $soruPic = $rsCevap["pic"];


?>
//div codes

<?php

}>

 for ($i=1; $i < $kac_soru_sorulacak ; $i++) { 

             $soruCevapId = array();
             $question = array();


         $hintsql = mysql_query("SELECT * FROM tblhints GROUP BY GroupId ORDER BY rand() LIMIT 1");
         $hintrs = mysql_fetch_assoc($hintsql);
         // $sorular = array();      
         $hintId = intval($hintrs["id"]);
         $hint = $hintrs["hint"];
         $foto = $hintrs["pic"];

         $grupid = intval($hintrs["GroupId"]);
         ################

         ################
         $cevapsql = mysql_query("select * from tblanswers where GroupId=".$grupid."");
         $cevaprs = mysql_fetch_assoc($cevapsql);
         $cevapId = intval($cevaprs["Answer"]);
         ################

         ################
         $hintsayi =  mysql_num_rows($hintsql);
         $siksql = mysql_query("select * from tblquestions where GroupId=".$grupid." order by rand()");

            while ($sikrs=mysql_fetch_assoc($siksql)) {
                $question[] =$sikrs["Question"];
                $soruCevapId[] = $sikrs["Id"];
            } 

         ################

    ?>

请您给我看一些代码示例吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

如果表格不是太大,可以使用随机数创建字段rdm_order(type:FLOAT)并按其排序。正如我所说,如果你的桌子太大,可能会太贵,但另一方面,这是一个非常快速和简单的解决方案:

UPDATE tblquestions SET rdm_order=RAND();
SELECT * FROM tblquestions WHERE GroupId={$grupid} ORDER BY rdm_order;

但是,每个用户会话也只能运行一次UPDATE。