【问题标题】:Inserting random numbers into a table in MYSQL将随机数插入到 MYSQL 中的表中
【发布时间】:2012-03-30 20:12:35
【问题描述】:

我正在尝试计算表中的行数并为“随机”字段生成随机数 现在可以了:

SELECT COUNT(*) FROM my_table; 

这很有效:

   UPDATE my_table SET random = FLOOR(6500 * RAND()) + 1;

但这不起作用:

UPDATE my_table SET random = FLOOR((SELECT COUNT(*) ) * RAND()) + 1;

但这会将行数计为 0 并加一,因此所有字段都有数字 1,而不是唯一的随机数。

任何我做错的想法都会很有帮助。

【问题讨论】:

    标签: mysql random count row


    【解决方案1】:

    这个怎么样?

    SELECT @cnt := count(*) FROM my_table;
    UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1;
    

    演示:http://sqlfiddle.com/#!2/a896d/4

    【讨论】:

    • 这正是我们所需要的,我没有意识到你可以像在 PHP 中那样使用变量。谢谢!
    【解决方案2】:

    你在问你做错了什么。正如 MySQL 手册所说“目前,您无法更新表并在子查询中从同一个表中进行选择。”这意味着你不能做类似的事情

    update my_table set random = (select min(my_field) from r);
    

    作为更新的一部分,您正在执行完整选择。

    但是,您可以使用没有错误的选择,但结果不是您所期望的 - 您使用的 SELECT 语句的范围只是当时正在处理的行。您可以通过创建一个名为 num 的字段并执行以下操作来测试:

    update my_table set random = (select count(*));
    

    您会看到每行的随机数都设置为 1,因为选择只查看您当时正在更新的一行。

    解决方案是计算行数,将其存储在一个变量中,然后在另一个语句中引用该变量。

    SET @row_count = count(*) from my_table;
    UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多