2

可能重复:
如何在 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 中做到这一点?

4

4 回答 4

8

我认为

SELECT * FROM table ORDER BY RAND() LIMIT 1

会成功的。

看:

http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand

于 2012-06-22T12:02:00.890 回答
4
SELECT * FROM table ORDER BY RAND() LIMIT 1
于 2012-06-22T12:00:59.877 回答
1
SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;

http://akinas.com/pages/en/blog/mysql_random_row/

于 2012-06-22T12:06:09.233 回答
0

您的初始查询确实会处理这些漏洞,因为它只是将行的 id 与您计算的随机值进行比较,并且不会尝试获取具有随机 id 的行。

它的问题是它给你一个不均匀的概率:一个大洞后面的任何行都有更大的概率被选中。

这就是为什么建议使用 mysql 技巧ORDER BY RAND()(参见其他答案)的原因,因为随机化将是准统一的。

于 2012-06-22T12:14:30.547 回答