gpt4 book ai didi

php - 关于动态大小查询的 PDO 和准备好的语句

转载 作者:行者123 更新时间:2023-11-29 13:15:40 24 4
gpt4 key购买 nike

我正在为大学节开发一个小型游戏网站,用户参加的比赛很少,并根据他们在结果表中的排名,在他们的用户表中更新分数。然后,结果 表将被截断以用于下一个事件。架构如下:

用户

-------------------------------------------------------------
user_id | name | college | points |
-------------------------------------------------------------

结果

---------------------------
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 (?,?...........,?);

如何动态准备这些查询?或者有什么更好的办法吗?

编辑

尽管它类似于 this question ,但在我的场景中,我有 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;

它完全动态地基于结果表中的内容。您不再需要单独处理每个 user_id

这里是SQLFiddle 演示

关于php - 关于动态大小查询的 PDO 和准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21494285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com