我有一个图像表,它与特定组(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
答案 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
以上在单个语句/查询中进行选择和更新。如果不起作用,请将结果插入临时表,并使用它们在单独的语句中进行更新。