我正在用 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。