这是我在更大的连接查询上尝试做的事情的简化查询.它仍然在这个小规模上打破.我试图为在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?
除了先生.不知道的是,还有另外一个问题.
您正在生成1到60之间的随机数,然后选择前25行.如果有足够的行(统计上)以超过25的随机值1结束,那么前25行当然在"randomtimer"列中的值都为1.
所以这可能是因为你在生产中只有比在dev服务器上有更多的数据.