目前正在使用:
$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中做到這一點?
目前正在使用:
$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中做到這一點?
我覺得
SELECT * FROM table ORDER BY RAND() LIMIT 1
會做的伎倆。
參見:
http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand
SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;
你的初始查詢做,因爲它只是一個行的id,針對您計算隨機值照顧孔和不會嘗試獲取具有隨機ID的行。
它的問題是它給你一個不一致的概率:大孔後面的任何一行都被選中的概率較大。
這就是爲什麼它建議使用mysql技巧ORDER BY RAND()
(請參閱其他答案),因爲隨機化將是準統一的。
這是有偏見的漏洞,但我不明白這是如何選擇一個不存在的行。 –
使用'RAND()'的任何解決方案都會很慢,因爲它不能執行索引。爲了更快,適當索引的解決方案,請參閱我的答案在這裏:http://stackoverflow.com/questions/10677767/fastest-random-selection-where-column-x-is-y-null/10677869#10677869 – Spudley