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