MySQL テーブルの列を更新して、1、2、3 などから始まるランダムなシーケンス番号を設定しようとしています。たとえば、合計 38 行あるので、1 ~ 38 の番号で更新する必要があります (複製できません)。私は使ってみました:
UPDATE TABLE SET VALUE=FLOOR(RAND()*38)+1
しかし、重複した番号が表示されます。すべての行に異なる番号が必要です。
まさにあなたが望むものではないかもしれませんが、1 から始まる一意の ID をテーブルに割り当てることを検討している場合、アーキテクチャ的に良い解決策は、「id」列を自動インクリメントの一意の番号にすることです。
ALTER TABLE TABLE_NAME ADD COLUMN_NAME INT PRIMARY KEY AUTO_INCREMENT;
列が既にある場合は、以前に削除できます。
ALTER TABLE TABLE_NAME DROP COLUMN_NAME
単なるサンプルコード:
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>