0

在我的 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 的数字没有种子。每次运行此查询时,都会回显一个新的数据库项。

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

4

2 回答 2

0

试试这个方法:SELECT * FROM dogs ORDER BY rand(MINUTE(NOW())) LIMIT 1

于 2013-03-11T09:50:25.800 回答
0

正如文档所说,“从 MySQL 5.1.16 开始,如果使用非常量初始化器(例如列名)作为参数,则种子将使用每次调用 RAND() 的值初始化”(http:// dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html#function_rand)。

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

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

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

于 2013-03-11T13:34:32.630 回答