gpt4 book ai didi

mySQL更新但也不更新

转载 作者:行者123 更新时间:2023-11-29 03:47:09 26 4
gpt4 key购买 nike

我正在用 mySQL/PHP 编写,但遇到这个问题我无法理解。这个 PHP 脚本包含两个 SQL 语句。我想要做的是更新一个体育联赛表(一个名为 tblrank 的 SQL 表——它包含许多联赛表,由 TableID 分隔),并指示自上次更新以来球队是上升还是下降。第一段代码有点笨拙,可能可以写得更好(我可以在 MSSQL 中用大约 6 行来完成),它的工作原理是计算排名低于它的团队的数量,然后添加一个。它似乎有效……有点像,我稍后会解释。

update tblrank AS r
set Rank = 1 + (select count(*) from
(select r2.teamID
from tblrank r2
inner join tblrank r3
where r3.TableID = r2.TableID and r3.TableID = $tableid
and (r3.Points > r2.Points
or (r3.Points = r2.Points and r3.TieBreaker > r2.TieBreaker))) as duh
where duh.teamID = r.teamID
and duh.TableID = r.TableID
and r.TableID = $tableid

然后,运行这段代码来选择要显示的图像。

update tblrank
set image = case when Rank < LastRank then 'up.png'
when Rank > LastRank then 'down.png'
else 'nomove.png' end
where TableID = $tableid

现在,如果我为 $tableid = 1 运行它,它工作得很好。但是,如果我为 $tableid = 2 运行它,那么整个 tblRank 中的所有等级都设置为 1。(在为 $tableid = 2 运行它之前,所有等级都是 1,除了 TableID =1 的记录)。这显然不是我想要的。

这两个语句都在 if(mysql_query($sql)) 条件语句中,因此我可以验证它们是否已执行。

我使用 MS SQL 的次数比 mySQL 多得多,所以我不是专家 - 任何人都可以帮助我解决这个问题,因为我感到困惑!我已经检查过这两个代码块都执行了。两者之间没有执行其他SQL。

最佳答案

好吧,我已经修复了它,我不确定哪里出了问题,但我已经将更新语句拆分了,首先创建并填充了一个名为 rankcount 的临时表。我这样做是为了更容易看到发生了什么。

create temporary table rankcount (TableID int, UserID int)");
insert into rankcount (TableID, UserID)
select r2.TableID, r2.UserID
from tblRank r2
inner join tblRank r3
where r3.TableID = r2.TableID and r3.TableID = $tableid
and (r3.Points > r2.Points
or (r3.Points = r2.Points and r3.TieBreakerOne > r2.TieBreakerOne))

然后这有效...

update userEntryTableRank r
set Rank = 1 + (select count(*) from rankcount rc
where rc.UserID = r.UserID and rc.TableID = r.TableID)
where r.TableID = $tableid

:)

关于mySQL更新但也不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059526/

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