2

我尝试更新我的 MySQL 表列,并设置随机序列号,从 1、2、3 等开始。例如,我总共有 38 行,所以我需要用数字 1-38 更新它(不能重复)。我尝试使用:

UPDATE TABLE SET VALUE=FLOOR(RAND()*38)+1

但它给了我一些重复的数字,我需要每一行都有不同的数字。

4

4 回答 4

3

你可以尝试这样的事情:

SET @r := 0;
UPDATE  table
SET     value = (@r := @r + 1)
ORDER BY
        RAND();

这将分配数字 1 到 38 将被随机且唯一地分配。

SQLFiddle

希望这可以帮助!!!

于 2013-09-20T08:18:53.287 回答
1

可能不是您想要的,但如果您正在寻找从 1 开始为您的表分配唯一 ID,那么架构上好的解决方案将使您的 'id' 列成为自动递增的唯一编号:

ALTER TABLE TABLE_NAME ADD COLUMN_NAME INT PRIMARY KEY AUTO_INCREMENT;

如果您已经拥有该列,则可以之前将其删除:

ALTER TABLE TABLE_NAME DROP COLUMN_NAME
于 2013-09-20T08:17:41.090 回答
0

如果您只想在 MySQL 中找到解决方案,则需要以下内容:

update test set id =  (select MAX(id)+1 from test)  WHERE <your_condition>

但是你会得到错误:

You can't specify target table 'test' for update in FROM clause

所以你必须做这样的事情来避免这个错误:

    update test set 
    id =  ( 
     select maxPlus1 from 
      (
       select MAX(id)+1 as maxPlus1 
       from test
      ) 
      maxTable
     ) WHERE <your_condition>
于 2013-09-20T08:25:32.830 回答
0
  • 第 1 步:执行 for 循环并将所有 38 个数字存储在一个数组中。
  • 第 2 步:使用 shuffle 函数对该数组进行洗牌。http://php.net/manual/en/function.shuffle.php
  • 第 3 步:为该洗牌数组执行 Foreach 循环并更新您的列。

只是示例代码:

  for($i=1;$i<=38;$i++)
  {
     $arr[$i] = $i;
  }

  shuffle($arr);

  foreach($arr as $randarray)
  {
     //Your SQL query here UPDATE TABLE SET VALUE=$randarray like that
  }
于 2013-09-20T08:16:05.677 回答