2013-03-02 114 views
1

我是php的新手。我正在創建小型在線考試應用程序。我在MySql中創建了一個問題表,並希望在頁面上只顯示一個問題。提交該問題的答案後,在頁面上顯示另一個問題。任何人都可以幫助我,我該怎麼做?由於從數據庫中獲取隨機數據

回答

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個數字。

這種方法的一個缺點是如果你的自動增量序列有漏洞。如果你沒有太多的數字,你可以把它扔出去,隨機挑選另一個數字。

下面是一些僞代碼:作爲逗號seprated

$_SESSION['asked_question_ids'] = $asked_question_ids; 

獲得其尚未使用的問題ID從會議提出的隨機問題會議

// 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 
0

組提出的問題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