为什么MySQL Rand()讨厌我?

kev*_*ler 2 mysql random

这是我在更大的连接查询上尝试做的事情的简化查询.它仍然在这个小规模上打破.我试图为在1-60范围内拉回的每一行生成一个随机数.然后我想通过这个随机数对返回的行进行排序.

 SELECT downloads . * , 
(FLOOR( 1 + ( RAND( ) *60 ) )) AS randomtimer
FROM downloads
ORDER BY randomtimer
LIMIT 25 
Run Code Online (Sandbox Code Playgroud)

我有2个数据库我试过这个查询.一个活的和一个开发的.我并排比较两者,它们在结构上都是一样的.它在开发者上正常工作.返回randomtimer排序的行.

实时表返回randomtimer列中的所有1.如果我通过随机选择ASC订购,他们将成为60年代.如果我从Order By子句中删除randomtimer,它将返回正确的单个值.所以有些东西正在调整ORDER BY语句中的值.

任何人对此都有任何想法?我可能会忽略一些东西吗?WTF?WTF?

Eri*_*lje 7

除了先生.不知道的是,还有另外一个问题.

您正在生成1到60之间的随机数,然后选择前25行.如果有足够的行(统计上)以超过25的随机值1结束,那么前25行当然在"randomtimer"列中的值都为1.

所以这可能是因为你在生产中只有比在dev服务器上有更多的数据.


bri*_*zil 6

来自兰德文档:

您不能在ORDER BY子句中使用具有RAND()值的列,因为ORDER BY将多次评估该列.但是,您可以按随机顺序检索行,如下所示:

mysql> SELECT*FROM tbl_name ORDER BY RAND();

我猜这种差异是由于不同的MySQL版本,查询计划或表数据,但不知道哪个.