【发布时间】:2012-10-31 04:47:02
【问题描述】:
我有一个users 表,我在其中存储用户信息以及像 Stackoverflow 一样的声誉分数。
我的问题是如何使用单个 MySQL 查询更新多个用户的声誉。
这是我的users 表
user_id reputation
1 11
2 202
3 3003
4 444
5 555
假设 user_id=1 反对 user_id=4 和 user_id=5。在这种情况下,user_id=1 的声誉损失 2 分,user_id=4,5 都损失 10 分。
users 表将如下所示:
user_id reputation
1 9 //lost 2 points
2 202
3 3003
4 434 //lost 10 points
5 545 //lost 10 points
我知道下面显示的 MySQL 查询有效,但我想知道在UPDATE 的用户数量是可变的并且取决于投票的情况下的通用解决方案。
UPDATE `users`
SET `reputation` = CASE
WHEN `user_id` = '1' THEN reputation - 2
WHEN `user_id` = '4' THEN reputation - 10
WHEN `user_id` = '5' THEN reputation - 10
ELSE `reputation` END
【问题讨论】:
-
我会用您当前的数据创建临时表。然后进行内部连接以立即更新记录。然后,您又面临如何定义声誉的“更新因素”的问题,例如-2、-10、+5... 等等。更新 tblUsers u JOIN temp_tblUsers t ON (u.ID=T.ID) SET p.REPUTATION = t.REPUTATION -2;
标签: php mysql sql arrays sql-update