簡體   English   中英

如何使用唯一的隨機序列號更新MySQL表列?

[英]How to update my MySQL table column with unique random sequence number?

我嘗試更新我的MySQL表列,並設置隨機序號,從1,2,3等開始。 例如,我總共有38行,所以我需要用數字1-38更新它(不能重復)。 我嘗試使用:

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

但這給了我一些重復的數字,我需要每一行都有不同的數字。

您可以嘗試如下操作:

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

這將分配1到38的數字,這些數字將隨機且唯一地分配。

SQLFiddle

希望這可以幫助!!!

可能不完全是您想要的,但是如果您希望為表分配從1開始的唯一ID,那么架構上好的解決方案就是將“ id”列設為自動遞增的唯一編號:

ALTER TABLE TABLE_NAME ADD COLUMN_NAME INT PRIMARY KEY AUTO_INCREMENT;

如果您已經有了該列,則可以先前將其刪除:

ALTER TABLE TABLE_NAME DROP COLUMN_NAME
  • 步驟1:執行for循環並將所有38個數字存儲在數組中。
  • 步驟2:使用隨機播放功能對數組進行隨機播放。 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
  }

如果僅在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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM