选择MySQL中存在的随机行

时间:2012-06-22 11:58:34

标签: mysql

  

可能重复:
  How to request a random row in 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 个答案:

答案 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;

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

答案 3 :(得分:0)

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

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

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