【发布时间】:2014-08-09 23:18:42
【问题描述】:
据我所知,这就是您在 MySQL 中选择随机排序行的方式:
SELECT * FROM test ORDER BY RAND() ASC;
现在这将返回一组随机排序的行。
但是如果我想两次抓取同一个随机集怎么办?我不能再使用RAND(),因为每次都会改变。
我尝试输入RAND() 生成的实际十进制数,但这似乎也不起作用。
有什么帮助吗?
【问题讨论】:
据我所知,这就是您在 MySQL 中选择随机排序行的方式:
SELECT * FROM test ORDER BY RAND() ASC;
现在这将返回一组随机排序的行。
但是如果我想两次抓取同一个随机集怎么办?我不能再使用RAND(),因为每次都会改变。
我尝试输入RAND() 生成的实际十进制数,但这似乎也不起作用。
有什么帮助吗?
【问题讨论】:
这实际上是一个非常常见的问题,在许多语言中都有一个通用的解决方案。大多数随机数生成器允许您在构造时传递种子值,具有相同种子的 RNG 每次生成随机数时都会返回相同的结果模式。
大多数 RNG 使用系统时间的某些函数作为默认种子(没有种子传递),每次都提供一组新的数字。
您可以将RAND() 与种子RAND(N) 一起使用,这将返回相同的行集,前提是基础表保持不变。例如,如果添加另一行,则会生成另一个随机数对于该行,它可能会出现在结果集中的任何位置。
【讨论】:
你可以使用相同的种子:
SET @seed = some_int_value; -- I did use the julian day count for a daily changing result.
SELECT * FROM test ORDER BY RAND(@seed) ASC;
见RAND
兰德(),兰德(N)
返回 0
【讨论】: