2013-03-11 93 views
3
SELECT * FROM dogs order by rand(dayofyear(CURRENT_DATE)) LIMIT 1 

在我看来,它通过随机数命令一个数据库,并且这个数字每天都在变化。这是一个猜测,因为它需要我花一天时间来确定这是否属实!请解释这个mysql查询。

我该如何更改此查询,以便每分钟而不是每天都按新的随机数来订购数据库?我尝试这样做:

SELECT * FROM dogs order by rand(minuteofhour(CURRENT_DATE)) LIMIT 1 

,但它并没有为你的时间工作:(

感谢

回答

4

随机数发生器(RNG),通常需要一个“种子值”,一个值,用于生成随机数,如果种子值始终相同,则随机数序列总是相同的,这就解释了为什么它每天都在变化。分钟)就是找到每分钟变化的种子值一个是ROUND(UNIX_TIMESTAMP()/60)

SELECT * FROM dogs order by rand(ROUND(UNIX_TIMESTAMP()/60)) LIMIT 1 
+0

什么是碰撞?为什么它比不使用种子更好? – Sebas 2013-03-11 00:53:48

+0

先生,你是个天才。 – Starkers 2013-03-11 01:02:33

+0

@Tom van der Woerdt 嗨汤姆。 数量似乎并没有种子,当我运行此查询: SELECT * FROM狗WHERE dateused <$ minute_ago ORDER BY兰特(ROUND(UNIX_TIMESTAMP()/ 60))LIMIT 1 的WHERE查询工作,但兰特的号码不会播种。每次运行此查询时,都会生成一个新的数据库项目。有任何想法吗? – Starkers 2013-03-11 01:43:14

0

我不擅长mysql。但你确定在mysql中有没有函数minuteofhour?

查询的想法是从数据库中选择一个随机记录。

你可以这样做: SELECT * FROM狗ORDER BY兰特(20)LIMIT 1

它将被列顺序

0

MySQL的funcs中使用二合一 “随机从1-20号” MINUTE()和NOW()。 NOW将返回当前日期,MINUTE会从中提取分钟值。