2014-02-11 71 views
0

我正在創建一個涉及從MySQL數據庫中獲取一些問題的項目。例如,如果我的數據庫中有200個問題,我想以這樣一種方式隨機選擇20個問題,以免任何問題重複兩次。也就是說,我希望能夠在每次用戶嘗試獲得問題列表時回答200個問題中的20個不同問題。我會很感激你的幫助。如何從MySQL中的表中選擇隨機行

+2

如果它將是200或類似的東西,只需使用'ORDER BY RAND()LIMIT 20' – zerkms

+0

http://stackoverflow.com/questions/211329/quick-selection-隨機行從一個大表在MySQL中 – zamnuts

+0

謝謝@zamnuts .....我明白了你的觀點。你們所說的一切都很有道理。我現在正在努力。再次感謝。 – wally

回答

0

使用Google找到一個函數來創建一個具有最小值和最大值的20個唯一數字的數組。使用此陣準備一個SQL查詢,如:

expression IN (value1, value2, .... value_n);

更多關於SQL here

可能的數組填充函數here too

+1

這將要求他知道有效的行ID。如果你有200行,並且從不刪除/添加,那麼這很好。我會用zerkms的答案。 –

+0

我相信任何答案都可以!不傷害,不知道更多的方式:) –

+0

你的方式是正確的,如果數據發生變化,將來可能會導致未來的問題。這將需要應用程序進行更改,並且在應用程序級別具有數據庫特定的知識通常是不好的做法。但它確實有效。 –

2
SELECT * FROM questions ORDER BY RAND() LIMIT 20; 

PS ^這不可能非常大表

+0

如果您確實有一個非常大的問題表,您可以嘗試使用MEMORY表類型。 –

+0

此查詢爲永久行生成RAND值。如果對很多行進行計數,此操作將需要很長時間。 – Hett

0

如果你知道有多少行是在表的方法,你可以做使用LIMIT你的優勢。有限制,你指定一個隨機偏移量語法:LIMIT offset,count。例如:

<?php 
$totalRows = 200; // get his value dynamically or whatever... 
$limit = 2; // num of rows to select 
$rand = mt_rand(0,$totalRows-$limit-1); 
$query = 'SELECT * FROM `table` LIMIT '.$rand.','.$limit; 
// execute query 
?> 

這對大表格應該是安全的,但是它會選擇相鄰的行。然後,您可以混合起來的結果通過array_randshuffle設置:

<?php 
// ... continued 
$resultSet = $pdoStm->fetchAll(); 
$randResultKeys = array_rand($resultSet,$limit); // using array_rand 
shuffle($resultSet); // or using shuffle 
?> 
0

假設你已經在你的數據庫連續數問題,你只需要20個隨機號碼列表。同時假設你希望用戶能夠採取一個以上的測試,並得到沒有重複另外20個問題,那麼你可以用200號的隨機陣列開始,並選擇20順序塊從該組即

$startQuestion=1; 
$maxQuestion=200; 
$numberlist= range(1,$maxQuestion); 
shuffle($numberlist); 

function getQuestionSet($noOfQuestions) 
{ 
    global $numberlist, $maxQuestion, $startQuestion; 
    $start= $startQuestion; 
    if(($startQuestion+$noOfQuestions) > $maxQuestion) 
    { 
    echo "shuffle...\n"; 
    shuffle($numberlist); 
    $startQuestion=1; 
    }else 
    $startQuestion+= $noOfQuestions; 

    return array_slice($numberlist,$start,$noOfQuestions); 
} 

// debug... 
for($i=0; $i<42; $i++) 
{ 
    $questionset= getQuestionSet(20); 
    foreach($questionset as $num) 
    echo $num." "; 
    echo "\n"; 
} 

然後使用$ questionset檢索您的問題

相關問題