2013-04-01 59 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