为什么这个mysql查询没有种子随机数?

时间:2013-03-11 01:40:53

标签: php mysql

在我的PHP程序环境中,这个查询每分钟回应一个新的数据库项,这正是我想要的。

SELECT * FROM dogs ORDER BY rand(ROUND(UNIX_TIMESTAMP()/60)) LIMIT 1

然而,当我这样做时:

SELECT * FROM dogs WHERE dateused<44 ORDER BY rand(ROUND(UNIX_TIMESTAMP()/60)) LIMIT 1

WHERE查询有效,但rand中的数字不是种子。每次运行此查询时,都会导致新数据库项的回显。

任何人都有任何想法如何让这个号码播种一分钟?或者至少,一个解决方案。非常感谢!

2 个答案:

答案 0 :(得分:0)

尝试这种方式:SELECT * FROM dogs ORDER BY rand(MINUTE(NOW())) LIMIT 1

答案 1 :(得分:0)

正如文档所述,“从MySQL 5.1.16开始,如果使用非常量初始值设定项(例如列名)作为参数,则使用每次调用RAND()的值初始化种子”({ {3}})。

但这适用于MySQL 5.1.16及更高版本。从MySQL 5.1.3到5.1.15,不允许使用非常量参数。在此之前,使用非常量参数的效果是未定义的。

因此,如果您从非常量参数得到不一致的结果,那么它可能是您的MySQL版本。

我尝试了你在5.1.47 MySQL上所做的事情,并且它按照你希望的方式工作。