2012-07-21 136 views
1

我有一張圖像表,它與特定組(vehID)相關聯,我需要爲每個組創建它們的順序。MySQL使用組的rowid更新列值

這是一個領域我忘了在設計初始圖像輸入位置。

我一直在玩@row,但沒有得到很遠。

set @row= 0; 
select @row:[email protected]+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 

回答

4

你只需要申報持有原先vehID另一個變量。然後使用IF語句,您可以將vehid與前一個進行比較,並相應地設置行號。然後將前一個車輛變量設置爲當前行的車輛編號。

請注意,我將「group by」更改爲「order by」。這有兩個原因:

1列出所有行

2至確保來自同一ID行彼此跟隨。否則與以前的值比較將不正確。

最後,請確保您比較之前的vehID值,並在重置之前的變量以保留當前行的值之前確定rownum的內容。

set @previous_vehID= 0; 
set @row= 0; 
select if(@previous_vehID=vehID, @row:[email protected]+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:[email protected]+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 

上述使得選擇並在單個語句/查詢更新。如果不起作用,請將結果插入臨時表並使用它們在單獨的語句中進行更新。

+0

傑出 - 我不會那麼做過。直到昨天,我不知道你可以使用變量和IF語句。現在我所有的圖像都被排序。我希望這對更多的人有用。非常感謝你。 – mcl 2012-07-22 09:34:11