我正在創建一個涉及從MySQL數據庫中獲取一些問題的項目。例如,如果我的數據庫中有200個問題,我想以這樣一種方式隨機選擇20個問題,以免任何問題重複兩次。也就是說,我希望能夠在每次用戶嘗試獲得問題列表時回答200個問題中的20個不同問題。我會很感激你的幫助。如何從MySQL中的表中選擇隨機行
回答
使用Google找到一個函數來創建一個具有最小值和最大值的20個唯一數字的數組。使用此陣準備一個SQL查詢,如:
expression IN (value1, value2, .... value_n);
更多關於SQL here。
可能的數組填充函數here too。
這將要求他知道有效的行ID。如果你有200行,並且從不刪除/添加,那麼這很好。我會用zerkms的答案。 –
我相信任何答案都可以!不傷害,不知道更多的方式:) –
你的方式是正確的,如果數據發生變化,將來可能會導致未來的問題。這將需要應用程序進行更改,並且在應用程序級別具有數據庫特定的知識通常是不好的做法。但它確實有效。 –
SELECT * FROM questions ORDER BY RAND() LIMIT 20;
PS ^這不可能非常大表
如果您確實有一個非常大的問題表,您可以嘗試使用MEMORY表類型。 –
此查詢爲永久行生成RAND值。如果對很多行進行計數,此操作將需要很長時間。 – Hett
如果你知道有多少行是在表的方法,你可以做使用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_rand
或shuffle
設置:
<?php
// ... continued
$resultSet = $pdoStm->fetchAll();
$randResultKeys = array_rand($resultSet,$limit); // using array_rand
shuffle($resultSet); // or using shuffle
?>
假設你已經在你的數據庫連續數問題,你只需要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檢索您的問題
- 1. MySQL - 從大表中選擇隨機行
- 2. 從MySQL表中隨機選擇行
- 3. 如何從MySQL中的表中選擇一個隨機行?
- 4. 如何從mysql表中隨機選擇或隨機播放它?
- 5. MYSQL從兩行中隨機選擇
- 6. 如何從MySQL中的每個組中選擇隨機行?
- 7. 從mysql中的表中隨機選擇一個'已發佈'行
- 8. 如何從MySQL中隨機選擇行進行分頁?
- 9. 從表中自動選擇隨機行
- 10. 如何從大表的子集中選擇mysql中的n個隨機行?
- 11. 從MySQL表中選擇看不見的隨機行
- 12. 從表中選擇隨機但不同的行 - MySQL
- 13. 如何從一組隨機數中進行隨機選擇?
- 14. 如何從mysql中選擇隨機表時設置異常?
- 15. 如何mysql隨機選擇表名
- 16. MySQL從兩個表中選擇隨機行加入連接
- 17. 無法從MySQL表中選擇一個隨機行
- 18. 用MySQL隨機選擇行
- 19. 在MySQL中選擇隨機行
- 20. PHP - 如何從表中選擇隨機但不同的行
- 21. 如何從表中隨機選擇唯一的行對?
- 22. 如何從表中選擇2個不同的隨機行?
- 23. PHP,從尚未選擇的mysql表中選擇一個隨機行!
- 24. 如何從SQL查詢選擇中選擇一個隨機行?
- 25. 如何從MySQL表中隨機選擇滿足特定條件的多行?
- 26. 如何從表中選擇一堆隨機行?
- 27. SQL Server CE 4 - 如何從表中選擇n個隨機行?
- 28. 如何根據鍵從表中選擇一組隨機行?
- 29. 如何從MySQL中選擇記錄的隨機樣本?
- 30. 如何從mysql表中選擇多行?
如果它將是200或類似的東西,只需使用'ORDER BY RAND()LIMIT 20' – zerkms
http://stackoverflow.com/questions/211329/quick-selection-隨機行從一個大表在MySQL中 – zamnuts
謝謝@zamnuts .....我明白了你的觀點。你們所說的一切都很有道理。我現在正在努力。再次感謝。 – wally