带有分组的MySQL Update列

时间:2013-05-17 18:58:06

标签: mysql

我有......

id      email      groupid
=========================================
1       abc@def    0
2       abc@def    0
3       yyy@yyy    0
4       zzz@zzz    0
5       abc@def    0
6       abc@def    0

我想......

id      email      groupid
=========================================
1       abc@def    1
2       abc@def    1
3       yyy@yyy    2
4       zzz@zzz    3
5       abc@def    4
6       abc@def    4

我正在运行这个...

set @previous_email= 0;
set @row= 0;
update slcms_table a, (select if(@previous_email=email, @row:=@row+1, @row:=1) as row, @previous_email:=email, email from slcms_table order by id) aa set a.groupid = aa.row where a.email=aa.email

但这给了我......

id      email      groupid
=========================================
1       abc@def    1
2       abc@def    1
3       yyy@yyy    3
4       zzz@zzz    4
5       abc@def    5
6       abc@def    5

如何在Mysql中做我想做的事情?我需要将顺序值设置为groupid列。

1 个答案:

答案 0 :(得分:0)

所以你要为每个不同的电子邮件分配一个groupid?如果是,请根据每封不同的电子邮件更新groupid:update tablename set groupid=x where email in (select distinct email from tablename);。首先,只需选择不同的电子邮件,即更新查询中的嵌套查询。然后创建序数,我建议使用Select @a:=@a+1 as ordinal(更新groupid的值) - 这个网站对使用mysql的排序有一个很好的解释:http://www.expattech.com/en/ordinal-row-numbers-in-mysql-queries/40017 - ,那些aridinals将是更新groupid的x变量。