以下将为每个帐户返回user_no(10-12)。 它按time_zone_id排序,然后使用mod函数依次选择三个用户中的每一个(第一个结果为11个,第二个为11个,第三个为12个,第四个为10个,依此类推)。
set @r = 0 ; select @r:=@r+1 row_no, account_id, account_name, mod(@r,3)+10 user_no from account order by time_zone_id
的 调整 强>
你可以以类似的方式获得用户
set @ur = 0; select @ur:=@ur+1 user_row_no, user_id from users where team_id = 4
的 再次修改 强>
这将是这样的
的 制作一些样本数据 强>
create table users( user_id int, team_id int) ; insert into users select 2,4 union select 3,4 union select 1,2 union select 7,4 union select 6,4; create table account ( account_id int, account_name varchar(20), time_zone_id varchar(3), assigned_to int ); insert into account(account_id ,account_name,time_zone_id) select 1,'Janice','pst' union select 2,'Jonny','gmt' union select 3,'Jane','gmt' union select 4,'Janet','pst' union select 5,'James','gmt';
的 制作一个表格以弹出我们感兴趣的用户 强> (可能/应该是temp_table)
create table temp_user( id int AUTO_INCREMENT primary key, user_id int ); insert into temp_user( user_id ) select user_id from users where team_id = 4;
的 更新 强>
set @r=0; update account join ( select @r:=@r+1 row_no, account_id, account_name, assigned_to from account order by time_zone_id ) x on x.account_id = account.account_id join temp_user on temp_user.id=(1+ mod(row_no,(select count(*) from temp_user))) set account.assigned_to = temp_user.user_id
http://sqlfiddle.com/#!2/164733/10