我正在为大学节开发一个小型游戏网站,在该网站上,用户参加了几场比赛,并且根据他们在result
表中的排名,在user
表中进行了更新。然后为下一个事件将result
表被截断。模式如下:
user
-------------------------------------------------------------
user_id | name | college | points |
-------------------------------------------------------------
result
---------------------------
user_id | score
---------------------------
现在,前3名学生获得100分,下一个15分给出50分,其他分别得到10分。
现在,我在开发查询方面有问题,因为我不知道有多少用户会尝试竞赛,因此我必须在查询中附加很多?
。其次,我还需要将)
放在末尾。
我的查询就像
$query_top3=update user set points =points+100 where id in(?,?,?);
$query_next5=update user set points = points +50 where id in(?,?,?,?,?);
$query_others=update user set points=points+50 where id in (?,?...........,?);
如何动态准备这些查询?或者,有更好的方法吗?
编辑
尽管它与这个问题相似,但是在我的情况下,我有3个不同的动态查询。
如果我正确理解您的要求,您可以对结果进行排名和更新用户表(添加点),一方面
UPDATE users u JOIN
(
SELECT user_id,
(
SELECT 1 + COUNT(*)
FROM result
WHERE score >= r.score
AND user_id <> r.user_id
) rank
FROM result r
) q
ON u.user_id = q.user_id
SET points = points +
CASE
WHEN q.rank BETWEEN 1 AND 3 THEN 100
WHEN q.rank BETWEEN 4 AND 18 THEN 50
ELSE 10
END;
它完全基于result
表中的内容完全动态。您不再需要单独处理每个user_id
。
这是 sqlfiddle demo