MySQL查询,加入(?)和更新列

时间:2015-07-29 15:10:15

标签: php mysql

我需要一个MySQL查询,这个查询恰好比我做过的任何其他查询复杂得多(我几乎不能使用最简单的查询)。

所以,我有2张桌子。一个有列(用户,排名),另一个有(用户,投票)。 在PHP环境中,我需要根据table2中包含的投票更新table1中用户的等级。根据“如果用户投票1,将+50添加到他的等级。如果用户投票为-1,则将-50添加到他的等级。如果用户投票2,则将+200添加到他的等级。”

我可以在PHP中完成所有“if”工作但是真的需要有一个高效的SQL查询来获取数据并操纵排名,因为我已经在我的项目中充满了优化不佳的询问。

提前非常感谢你!

1 个答案:

答案 0 :(得分:2)

使用insert...select语句结合ON DUPLICATE KEY UPDATE子句,您应该可以一次性完成:

INSERT INTO userrank(user, rank)
SELECT v.user, sum(v.vote) * 50 as rank
FROM uservote v
ON DUPLICATE KEY UPDATE rank = v.rank

您可以添加第二个语句,以防您在删除所有选票时删除用户的排名:

DELETE FROM userrank r
WHERE NOT EXISTS (SELECT 'x' FROM uservote v WHERE v.user = r.user)