可能重复:
如何在 SQL 中请求随机行?
目前使用:
$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 中做到这一点?
可能重复:
如何在 SQL 中请求随机行?
目前使用:
$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 1
SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;
您的初始查询确实会处理这些漏洞,因为它只是将行的 id 与您计算的随机值进行比较,并且不会尝试获取具有随机 id 的行。
它的问题是它给你一个不均匀的概率:一个大洞后面的任何行都有更大的概率被选中。
这就是为什么建议使用 mysql 技巧ORDER BY RAND()
(参见其他答案)的原因,因为随机化将是准统一的。