以下将为每个帐户返回一个 user_no ( 10-12 )。它按 time_zone_id 排序,然后使用 mod 函数依次选择三个用户中的每一个(第一个结果为用户 10,第二个结果为 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