[英]Select Random query in MySQL
有好幾次我用來選擇隨機行:
$get_question = $user_home->runQuery('SELECT * FROM questions WHERE Level = :Level ORDER BY RAND()');
一位專家告訴我,
RAND()是殺死MySQL服務器的秘訣!
因此,借助此答案,我嘗試了:
$get_question = $user_home->runQuery('SELECT * FROM questions AS r1 JOIN (SELECT CEIL(RAND() * (SELECT MAX(Sr) FROM questions)) AS Sr) AS r2 WHERE r1.Sr >= r2.Sr AND Level = :Level ORDER BY r1.Sr ASC LIMIT 1');
這就是我顯示結果的方式:
echo $fetch_question['Question'] . "(" . $fetch_question['Id'] . ")";
顯示為:
question(id)
但是,有時只顯示:
()
為什么這樣? 我犯了什么錯誤?
我認為首先您應該知道表格的max
和min
ID:
select max(id) as mx , min(id) as mn from questions
然后從PHP生成隨機ID :
$randomId = rand($min, $max);
然后使用此$randomId
運行查詢:
SELECT * FROM questions WHERE id = $randomId
更新:
首先獲取全部行數:
SELECT COUNT(*) FROM questions
將其提取到PHP變量中 ,生成零至行號之間的行號:
$randNum = rand(0, $rowCount);
然后像這樣運行查詢:
SELECT * FROM questions LIMIT $rowNumber, 1
如果您有一百萬行以下,則ORDER BY RAND() LIMIT nn
不是“殺手”。
如果您仍然認為它是殺手er,則有多種方法可以獲取一些隨機行而不進行全表掃描 : http : //mysql.rjweb.org/doc.php/random (它們超出了godot的建議。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.