MySQL使用组的rowid更新列值

时间:2012-07-21 09:16:02

标签: mysql

我有一个图像表,它与特定组(vehID)相关联,我需要为每个组创建订单。

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

我一直在玩@row,但没有走得太远。

set @row= 0;
select @row:=@row+1 as row, vehID,imgID from images group by vehID;

这给了我rowID但不为每个组重置

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

我无法弄清楚如何在更改车辆时将@row重置为0。可能是一些子选择。

如果我能得到选择,就如何更新代码提出任何建议,如果不明显将会受到赞赏

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

1 个答案:

答案 0 :(得分:4)

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

请注意我将“group by”更改为“order by”。这有两个原因:

1-列出所有行

2-确保来自相同id的行彼此跟随。否则与之前的值相比将不正确。

最后,确保比较之前的车辆值,并在重置上一个变量以保持当前行的值之前确定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

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