2

MySQL テーブルの列を更新して、1、2、3 などから始まるランダムなシーケンス番号を設定しようとしています。たとえば、合計 38 行あるので、1 ~ 38 の番号で更新する必要があります (複製できません)。私は使ってみました:

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

しかし、重複した番号が表示されます。すべての行に異なる番号が必要です。

4

4 に答える 4

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
  • ステップ 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
  }
于 2013-09-20T08:16:05.677 に答える
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 に答える