2012-06-22 138 views
1

可能重複:
How to request a random row in SQL?選擇存在於MySQL的隨機行

目前正在使用:

$randomQuery = mysql_fetch_row(mysql_query("SELECT * FROM `table` WHERE `id` >= RAND() * (SELECT MAX(`id`) FROM `table`) LIMIT 1")); 

表結構:

id: 
2 
4 
5 

我想確保它選擇一個現有的行。例如,它的隨機功能不應該使用1或3。有沒有辦法在MySQL中做到這一點?

+0

這是有偏見的漏洞,但我不明白這是如何選擇一個不存在的行。 –

+0

使用'RAND()'的任何解決方案都會很慢,因爲它不能執行索引。爲了更快,適當索引的解決方案,請參閱我的答案在這裏:http://stackoverflow.com/questions/10677767/fastest-random-selection-where-column-x-is-y-null/10677869#10677869 – Spudley

回答

4
SELECT * FROM table ORDER BY RAND() LIMIT 1 
+0

這將工作,但會很慢,因爲它不會使用索引。 – Spudley

0

你的初始查詢做,因爲它只是一個行的id,針對您計算隨機值照顧孔和不會嘗試獲取具有隨機ID的行。

它的問題是它給你一個不一致的概率:大孔後面的任何一行都被選中的概率較大。

這就是爲什麼它建議使用mysql技巧ORDER BY RAND()(請參閱其他答案),因爲隨機化將是準統一的。