【问题标题】:How to select the same set of random rows in MySQL?如何在 MySQL 中选择同一组随机行?
【发布时间】:2014-08-09 23:18:42
【问题描述】:

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

SELECT * FROM test ORDER BY RAND() ASC;

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

但是如果我想两次抓取同一个随机集怎么办?我不能再使用RAND(),因为每次都会改变。

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

有什么帮助吗?

【问题讨论】:

    标签: mysql sql random


    【解决方案1】:

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

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

    您可以将RAND() 与种子RAND(N) 一起使用,这将返回相同的行集,前提是基础表保持不变。例如,如果添加另一行,则会生成另一个随机数对于该行,它可能会出现在结果集中的任何位置。

    See RAND() docs.

    【讨论】:

    • 你确实打败了我 :-)
    【解决方案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

    【讨论】:

    • 你知道你可以直接将整数 val 直接输入函数吗?
    猜你喜欢
    • 2013-04-01
    • 2010-11-19
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多