我是php的新手。我正在创建小型在线考试申请表。我在MySql中创建了一个Question表,并希望在页面上只显示一个问题。提交该问题的答案后,在页面上显示另一个问题。任何人都可以帮我,我怎么能这样做?感谢
答案 0 :(得分:0)
SELECT * FROM questions ORDER BY RAND()LIMIT 4
答案 1 :(得分:0)
编辑2 这是更新伪代码来修复原始代码的一些问题。
基本上,这里的变化是从数据库中获取所有问题ID,然后进行改组。这避免了自动增量序列中缺少id的情况,这很可能。
旧代码的另一个变化是从数据库中获取所有选定的问题,而不是一次一个。不知道我在想什么。
这是一些伪代码:
// Get all questions ids. This should be fine since there shouldn't be too many cases where you will have more than 1000 questions.
$questionIds = db.selectIdsFromQuestionsWhereTypeIsSports();
// Shuffle array so the question ids are out of order
shuffle($questionIds);
// Number of questions you want
$quizLength = 5;
// select your questions
$selectedQuestions = array_slice($questionIds, 0, $quizLength);
// Now fetch all data for selected questions
$quiz = db.fetchByWhereIdIn($selectedQuestions);
// Now do whatever with your question
**原始
我不会使用MySQL rand
函数。如果你有很多行,它不会提供很好的性能。此外,您还有机会再次选择相同的问题。
所以我要做的是从数据库中检索你的一组问题,然后在php中随机播放。
如果您有数千个问题,那么我建议您随机生成一系列与您的自动增量ID相关的数字。如果您没有使用自动增量ID,那么这将不起作用。
因此,如果您想在数据库中询问10个问题并且有100个问题,那么例如,生成1到100之间的10个数字。
这种方法的一个缺点是你的自动增量序列中有漏洞。如果你没有太多的数字,你可以把它丢掉并随机选择另一个数字。
这是一些伪代码:
// Get a count of your questions from the database
$totalQuestions = db.count();
// Generate an array sequence/range
$questionIds = range(1, $totalQuestions);
// Shuffle array so the numbers are out of order
shuffle($questionIds);
// Store your questions
$quiz = array();
// Number of questions you want
$quizLength = 5;
// Now you can retrieve questions like so
while (count($quiz) == $quizLength) {
$question = db.fetchById(array_pop($questionIds);
if ($question != null) {
$quiz[] = $question;
}
}
// Now do whatever with your question
答案 2 :(得分:0)
在会话中设置问题ID以逗号分隔
$_SESSION['asked_question_ids'] = $asked_question_ids;
使用会话
中的问题ID获取尚未提出的随机问题$asked_question_ids = '3, 4, 5, asked queston ids from session'
SELECT * FROM questions WHERE qid NOT IN ($asked_question_ids) ORDER BY RAND() LIMIT 1