MySQL使用组的rowid更新列值

MySQL使用组的rowid更新列值,mysql,Mysql,我有一个与特定组(vehID)关联的图像表,我需要为每个组创建它们的顺序 这是我忘记在其中设计的字段的初始图像条目位置 我一直在玩@row,但没走多远 set @row= 0; select @row:=@row+1 as row, vehID,imgID from images group by vehID; 这将为我提供rowID,但不会为每个组重置 每个vehID有1到n个条目,我希望计算该值并用计算值更新该行的条目 我不知道如何在更改vehID时将@row重置为0。可能是一些子选择 如

我有一个与特定组(vehID)关联的图像表,我需要为每个组创建它们的顺序

这是我忘记在其中设计的字段的初始图像条目位置

我一直在玩
@row
,但没走多远

set @row= 0;
select @row:=@row+1 as row, vehID,imgID from images group by vehID;
这将为我提供rowID,但不会为每个组重置

每个vehID有1到n个条目,我希望计算该值并用计算值更新该行的条目

我不知道如何在更改vehID时将@row重置为0。可能是一些子选择

如果我可以得到选择工作的任何建议,如何代码更新,如果不明显将不胜感激

Update images set imgPosition = Calculated Value where imgID = current imgID

您只需要声明另一个保存前一个vehID的变量。然后使用IF语句,您可以将vehID与上一个进行比较,并相应地设置行号。然后将前一个vehID变量设置为当前行的vehID

请注意,我将“分组依据”更改为“订单依据”。这有两个原因:

1-列出所有行

2-确保来自相同id的行相互跟随。否则与以前的值比较将不正确

最后,在重置前一个变量以保存当前行的值之前,请确保比较前一个vehID值并确定rownum是什么

set @previous_vehID= 0;
set @row= 0;
select if(@previous_vehID=vehID, @row:=@row+1, @row:=1) as row,@previous_vehID:=vehID, vehID,imgID from images order by vehID
编辑:

我只是错过了更新部分。您可以尝试跨表更新:

set @previous_vehID= 0;
set @row= 0;
update images a, (
    select if(@previous_vehID=vehID, @row:=@row+1, @row:=1) as row,@previous_vehID:=vehID, vehID,imgID from images order by vehID ) aa
set a.imgPosition = aa.row where a.vehID=aa.vehID and a.imgID=aa.imgID

上述操作在单个语句/查询中进行选择和更新。如果不起作用,请将结果插入临时表,并使用它们在单独的语句中进行更新。

您只需声明另一个包含上一个vehID的变量。然后使用IF语句,您可以将vehID与上一个进行比较,并相应地设置行号。然后将前一个vehID变量设置为当前行的vehID

请注意,我将“分组依据”更改为“订单依据”。这有两个原因:

1-列出所有行

2-确保来自相同id的行相互跟随。否则与以前的值比较将不正确

最后,在重置前一个变量以保存当前行的值之前,请确保比较前一个vehID值并确定rownum是什么

set @previous_vehID= 0;
set @row= 0;
select if(@previous_vehID=vehID, @row:=@row+1, @row:=1) as row,@previous_vehID:=vehID, vehID,imgID from images order by vehID
编辑:

我只是错过了更新部分。您可以尝试跨表更新:

set @previous_vehID= 0;
set @row= 0;
update images a, (
    select if(@previous_vehID=vehID, @row:=@row+1, @row:=1) as row,@previous_vehID:=vehID, vehID,imgID from images order by vehID ) aa
set a.imgPosition = aa.row where a.vehID=aa.vehID and a.imgID=aa.imgID

上述操作在单个语句/查询中进行选择和更新。如果不起作用,将结果插入一个临时表,并使用它们在单独的语句中进行更新。

未完成-我永远不会解决这个问题。直到昨天我才知道可以使用变量和IF语句。现在我所有的图像都被排序了。我希望这对更多的人有用。非常感谢。太棒了——我永远也不会想到这一点。直到昨天我才知道可以使用变量和IF语句。现在我所有的图像都被排序了。我希望这对更多的人有用。非常感谢你。