0

私は持っている...

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 列に連続した値を設定する必要があります。

4

1 に答える 1

0

それぞれの個別の電子メールにグループ ID を割り当てていますか? その場合は、個別の各メールに基づいて groupid を更新します: update tablename set groupid=x where email in (select distinct email from tablename);. 最初に、更新クエリ内のネストされたクエリである個別の電子メールを選択するだけです。次に、序数を作成します。(グループ ID を更新するための値) を使用することをお勧めしますSelect @a:=@a+1 as ordinal。このサイトには、mysql での順序付けに関する適切な説明があります。 /40017 - これらのアリディナルは、グループ ID を更新するための x 変数になります。

于 2013-05-17T19:11:32.753 に答える