簡體   English   中英

不使用ID返回隨機行,MySQL

[英]Return a random row without using ID, MySQL

我正在尋找一種更好的方法來做到這一點:

SELECT * FROM $tbl_name WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM $tbl_name ) ORDER BY id LIMIT 1;

它很慢,而且不是很隨機,每查詢10個查詢就會得到相同的結果。

這將從表中選擇一個隨機行,而不考慮其ID。

到目前為止,我有這個:

// Get amount of rows in database
$result = mysql_query("SELECT * FROM $tbl_name");
$num_rows = mysql_num_rows($result);

// Generate random number
$random_row = rand(1, $num_rows);

但是我不知道該如何排。

我不是那意思

SELECT * FROM $tbl_name WHERE id = $random_row

因為我的數據庫在ID列中有空白,所以有時會失敗。

有沒有人能從MySQL數據庫中獲得隨機結果而無需回復ID的腳本,而且腳本超快? (數據庫包含約20000行)

SELECT * FROM $tbl_name WHERE 1 ORDER BY RAND() LIMIT 1;

20,000行並不是很多,以上應該足夠快。

Juhana認為這本書是正確的:“ ORDER BY RAND()LIMIT 1”,當然20k並不是那么多。 其他選項將帶有子選擇:SELECT [fields] from myTable,(SELECT FLOOR(MAX(myTable.id)* RAND())AS myId from myTable)AS someRandId WHERE myTable.id = someRandId.randId

這里討論(請避免在不需要時選擇*)

在搜索了有關Adi發送的鏈接的評論之后,我找到了一個不錯的解決方案。

SELECT * FROM $tbl_name T JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM $tbl_name) AS x ON T.ID >= x.ID LIMIT 1; 

資料來源:wanderr.com/jay/order-by-slow/2008/01/30

似乎非常快而且非常隨機!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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