【问题标题】:How do I insert a random value into mysql?如何将随机值插入mysql?
【发布时间】:2011-10-31 01:23:35
【问题描述】:

看起来 RAND 是我需要的,但我在理解它的工作原理时遇到了一些麻烦。

我需要在几千行中插入一个 60 到 120 之间的随机数。表名:listing,列名:hits

你能帮忙吗?

【问题讨论】:

    标签: mysql random insert


    【解决方案1】:

    要生成一个介于 60 和 120 之间的随机整数,您需要对 RAND() 的结果进行一些算术运算,它只会产生浮点值:

    SELECT FLOOR(60 + RAND() * 61);
    

    那么这里发生了什么:

    RAND() 将产生类似0.847269199 的值。我们将它乘以 61,得到值 51.83615194。我们添加 60,因为这是您想要的高于零的偏移量 (111.83615194)。 FLOOR() 将整件事向下舍入到最接近的整数。最后,你有 111。

    要对几千个现有行执行此操作:

    UPDATE table SET randcolumn = FLOOR(60 + RAND() * 61) WHERE (<some condition if necessary>);
    

    更多示例请参见the MySQL docs on RAND()

    注意我认为我有算术权利,但如果您得到的值 59 或 121 超出预期范围,请相应地向上或向下更改 +60

    【讨论】:

    • 这只会产生 [0;120) 中的数字 - 你需要乘以 61。
    • @emboss 它产生了 [60:119],而不是 [0:120],但你对 61 乘数是正确的
    • 谢谢大家。我必须阅读大约 3X 才能理解它,但我明白了.. 查询效果很好!
    【解决方案2】:

    这里是如何获得一个范围内的随机数。以下可能有点模棱两可,因为 61 实际上是您的最大值 (120) 减去您的最小值 (60) + 1 以获得包容性结果。

    SELECT FLOOR(60 + (RAND() * 61));
    
    SELECT FLOOR(MIN_Value + (RAND() * (MAX_Value - MIN_Value) + 1);
    

    http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand

    【讨论】:

      【解决方案3】:
      UPDATE X SET C = FLOOR(61 * RAND() + 60) WHERE ...;
      

      获取60到120之间的数字(包括60到120);

      RAND() 在区间 [0;1) 中创建一个数字(即不包括 1)。所以 61 * RAND() 在 [0, 61) 中产生一个数字。 61 * RAND() + 60 is in [60;121) 通过向下取整,您可以确保您的数字确实在 [60;120] 中。

      【讨论】:

        【解决方案4】:

        当我遇到这种问题时,我尝试了手动,但我有超过 500 行, 从逻辑上讲,我带来了一个对我有帮助的技巧,因为如果您在查询时运行 RAND, 由于重复或主键问题,您最终可能会收到错误报告,特别是如果该列是 PRIMARY KEYAUTO INCREMENT

        1. 首先 - 我重命名了相关列,例如我的是 ID -> IDS
        2. 其次 - 我创建了另一列并将其命名为 ID
        3. 第三次 - 我运行了这段代码

        更新历史 SET id = FLOOR( 217 + RAND( ) *2161 )

        这会自动创建一个随机数,后来我删除了重命名的 IDS 列

        来自迈克尔。 谢谢

        【讨论】:

          猜你喜欢
          • 2014-01-24
          • 2012-04-13
          • 2010-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-30
          • 1970-01-01
          • 2014-09-02
          相关资源
          最近更新 更多