我尝试更新我的 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 将被随机且唯一地分配。
希望这可以帮助!!!
可能不是您想要的,但如果您正在寻找从 1 开始为您的表分配唯一 ID,那么架构上好的解决方案将使您的 'id' 列成为自动递增的唯一编号:
ALTER TABLE TABLE_NAME ADD COLUMN_NAME INT PRIMARY KEY AUTO_INCREMENT;
如果您已经拥有该列,则可以之前将其删除:
ALTER TABLE TABLE_NAME DROP COLUMN_NAME
如果您只想在 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>
只是示例代码:
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
}