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。可能是一些子选择。

如果我可以让 Select 就如何对 UPDATE 进行编码(如果不是很明显)提出任何建议,将不胜感激

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

1 回答 1

4

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

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

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

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

于 2012-07-21T17:41:18.733 回答