目前正在使用:
$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 :(得分:8)
我认为
SELECT * FROM table ORDER BY RAND() LIMIT 1
会做到这一点。
请参阅:
http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand
答案 1 :(得分:4)
SELECT * FROM table ORDER BY RAND() LIMIT 1
答案 2 :(得分:1)
SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;
答案 3 :(得分:0)
您的初始查询确实会处理漏洞,因为它只是将行的ID与您计算的随机值进行比较,并且不会尝试获取具有随机ID的行。
它的问题是它给你一个非均匀的概率:大洞之后的任何一行都有更大的被选中概率。
这就是为什么建议使用mysql技巧ORDER BY RAND()
(参见其他答案),因为随机化将是准统一的。