如何根据另一个表中的行顺序使存储过程更新一个表中的一列?

时间:2015-10-24 02:24:10

标签: mysql stored-procedures multiple-columns multiple-tables

我有两张桌子

用户:

user    |  name  |  country |  rank              | country_rank       | points
1       |  frank |  US      |  to be determined  | to be determined   | to be determined

奖:

awarded_to  |  points_awarded  
1           |  10
1           |  30

如何根据points的{​​{1}},然后分别根据pointsawards制作存储过程来更新用户总数rank基于country_rank的顺序(即points 1将是rank}用户最多的用户?

我考虑制作一个PHP脚本,并使用crontab偶尔调用它,只需在PHP中选择信息并进行数学运算等,但存储过程似乎对我的用例更实用。

1 个答案:

答案 0 :(得分:0)

create temporary table awardsum (user int, total int); #temp
insert into awardsum
select a.awarded_to, sum(a.points_awarded) 
from users u 
inner join awards a on u.user=a.awarded_to
group by a.awarded_to;

update users
join awardsum on users.user=awardsum.user
set users.points = awardsum.total;    

SELECT @row:=0;
UPDATE users
SET rank = (@row:=@row+1)
ORDER BY points desc;

drop table awardsum;