2013-04-01 57 views
2

我有3列(itemidaltidcounter與+1增量更新列基於

我有困難的時候的每一行循環更新基於counter列一個MySQL表,重複值的列上重複itemid的數量。什麼我試圖完成

例子:

itemid | altid | counter 
1  30  1 
1  31  2 
1  37  3 
5  53  1 
5  54  2 
6  112  1 
6  113  2 
6  114  3 
6  115  4 

通知,其中itemid被複制,在counter被遞增+1。

該列表大約有2500行。我的counter列爲空。我沒有運氣,因爲我不知道如何檢測重複值(或檢查以前的值)在一個while循環內的增量在PHP中更新。

這是我現在所擁有的(不工作):

$query = mysql_query("SELECT * FROM table") or die(mysql_error()); 
while ($row = mysql_fetch_assoc($query)){ 
$itemid = $row['itemid']; 
$i=1; 
    if($row['itemid']!=$itemid){ 
    $i=1; 
    } 
$id = $row['id']; 
$query = mysql_query("UPDATE table SET counter='$i' WHERE id=$id") or die(mysql_error()); 
$i++; 
} 

我搜查,並沒有發現很多工作來幫助實現這一目標。任何幫助或推動正確的方向將非常感激!

+0

什麼'UPDATE表SET VAR =(SELECT COUNT(*)。 ..)'? – zipser

+0

我不知道我關注...如何在itemid列中的這些重複值上增加+1? – Chris

+0

櫃檯專欄有什麼意義? (即,爲什麼有VS得到這個數據,標準SQL十歲上下的方式'選擇的itemid,COUNT(*)FROM表GROUP BY itemid') –

回答

5

試試這個MySQL:

SET @pos=0, @last=0; 
UPDATE `table` SET `counter`=(
    @pos:=if(
     @last=`itemid`, 
     @pos+1, 
     (@last:=`itemid`) and 1 
    ) 
) ORDER BY `itemid` ASC; 
+0

這工作完美!正是我期望完成的。非常感謝! – Chris