簡體   English   中英

在MySQL中選擇隨機查詢

[英]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)

但是,有時只顯示:

()

為什么這樣? 我犯了什么錯誤?

這是我的數據庫快照有問題!

我認為首先您應該知道表格的maxmin 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM