如何在MySQL中选择相同的随机行集?

时间:2014-08-09 23:18:43

标签: mysql sql random

据我所知,这就是你在MySQL中选择随机排序的行的方法:

SELECT * FROM test ORDER BY RAND() ASC;

现在这将返回一组随机排列的行。

但是如果我想两次抓住相同的随机集呢?我不能再次使用RAND(),因为每次都会改变。{/ p>

我尝试输入RAND()生成的实际十进制数字,但这似乎也不起作用。

任何帮助?

2 个答案:

答案 0 :(得分:2)

您可以使用相同的种子:

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< = v<范围内的随机浮点值v。 1.0。如果   指定了一个常量整数参数N,它用作种子   value,它产生可重复的列值序列。在里面   下面的例子,RAND(3)产生的值序列是   在它们出现的两个地方都是一样的。

答案 1 :(得分:1)

对于许多语言的通用解决方案来说,这实际上是一个非常常见的问题。大多数随机数生成器允许您在构造时传递种子值,每次生成随机数时,具有相同种子的RNG返回相同的结果模式。

大多数RNG使用系统时间的某些功能作为默认种子(没有通过种子),每次都提供一组新的数字。

您可以将RAND()与种子RAND(N)一起使用,如果基础表保持不变,这将返回相同的行集。如果添加了另一行,例如,另一行将为该行生成数字,它可能会在结果集中的任何位置结束。

See RAND() docs