我有一个包含四个字段的数据库QiD主键,问题,答案,分数。我希望一次一个地得到一个问题...但对于参加测验的用户,问题nos应该是从1到N,其中N是总数。问题。
当用户选择选项(单选按钮)时......应该与该问题的答案字段数据进行比较,并且应该更新分数。
我尝试了几个技巧但却无法得到它...... pl。帮帮我......
答案 0 :(得分:2)
许多方法都可以使用RAND()函数,但在表现方面不是很好:
SELECT * FROM question
ORDER BY RAND()
LIMIT 1
更快的方法是确定PHP(或其他语言)中的随机数:
// first request
SELECT MAX(id) FROM question
// PHP part
$random = rand(0, $theMaxId);
// SQL request to get a random question
SELECT * FROM question WHERE id = $random
对于SQL版本,请参阅:MySQL select 10 random rows from 600K rows fast
编辑(使用PDO完成示例):
$req = $db->query('SELECT MAX(id) as nbr FROM question');
$rep = $req->fetch();
$theMaxId = $rep['nbr'];
$random = rand(0, $theMaxId);
// SQL request to get a random question
$req = $db->prepare("SELECT * FROM question WHERE id = :id");
$req->bindParam(':id', $random, PDO::PARAM_INT);
$req->execute();
$question = $req->fetch();
// here you are :)
答案 1 :(得分:1)
在你的mysql查询中试试这个
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
答案 2 :(得分:0)
通过rand()'
使用'命令从表中获取随机问题并更新分数:
将Qid指定为单选按钮。例如:输入类型="无线电" ID =" 2"
点击检查使用ajax weather ans是否正确并分别更新得分。
答案 3 :(得分:0)
将问题保存到数组中。
while ($row = mysqli_fetch_array($results, MYSQL_NUM)){ $questions[] = $row[0];}
shuffle($questions);shuffle($questions);shuffle($questions);
$ndx = 0;
然后一次抓住一个问题。
$question= array_slice($questions, $ndx, 1);
$ndx++;
你不会得到重复的问题 表现非常出色。
第1行:根据查询结果创建数组问题(排除查询)
第2行:随机播放问题3x数组。
生成问题HTML
(未测试)
echo '<div id="questionBox"><form method="POST" action="score.php" >';
foreach ($question as $k=>$q){
echo "<div id=\"q$k\"><fieldset><legend>$k</legend><div class=\"q\">$q[1]</div><input class=\"true\" type=\"radio\" name=\"a$q[0]\" value=\"1\" /> True</div><br><div id=\"a$question[0]\" class=\"false\"><input class=\"false\" type=\"radio\" name=\"a$q[0]\" value=\"0\" /> False</div><button onclick=\"next($k)\">Next</button></fieldset></div>\n";
}
echo '<div id="q' . $k . '"><input type="submit" name="Score" Value="Score" /></div></form></div>";
<强> JS 强>
(未测试)
echo <<<EOT
<script type="text/javascript">
//<![CDATA[
var q = new Array;
var divs = document.getElementsByTagName("div");
for (var div=1;div<divs.length;div++){
did = divs[div].getAttribute("id");
if (did == null){continue;}
divs[div].style.display='none;
q.push(div);
}
document.getElementById['q1'].style.display='block';
function next(a){
q[a].style.display='none;
q[a+1].style.display='block;
}
//]]>
</script>
EOT;