我需要一个MySQL查询,这个查询恰好比我做过的任何其他查询复杂得多(我几乎不能使用最简单的查询)。
所以,我有2张桌子。一个有列(用户,排名),另一个有(用户,投票)。 在PHP环境中,我需要根据table2中包含的投票更新table1中用户的等级。根据“如果用户投票1,将+50添加到他的等级。如果用户投票为-1,则将-50添加到他的等级。如果用户投票2,则将+200添加到他的等级。”
我可以在PHP中完成所有“if”工作但是真的需要有一个高效的SQL查询来获取数据并操纵排名,因为我已经在我的项目中充满了优化不佳的询问。
提前非常感谢你!
答案 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)