我写在mySQL/PHP,但有这个问题,我不能让我的头。这一个PHP脚本包含两个SQL语句。我想要做的是更新一个运动联盟表(一个名为tblrank的SQL表 - 它包含许多联赛表,由TableID分隔),并且指示自上次更新以来球队是否上涨或下跌。这第一个代码有点笨重,可能写得更好(我可以在MSSQL中做大约6行代码),它的工作原理是计算排名比它低的团队的数量,然后再添加一个。它似乎工作......就像我稍后将解释的那样。mySQL更新,但也没有更新
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中的所有Rank都设置为1.(在运行$ tableid = 2之前,除TableID = 1的记录外,所有等级均为1)。这显然不是我想要的。
这两个语句都在if(mysql_query($ sql))条件中,所以我可以验证它们是否已经执行。
我使用MS SQL比mySQL多得多,所以我不是专家 - 任何人都可以帮助我,因为我很困惑!我检查了两个代码块都执行。两者之间没有执行其他SQL。
我认为这可能与您需要的相反,因为排名较高的团队最终会得到较大的Rank值。 – 2010-01-14 02:04:06
我不想让r1通过TeamID与r2匹配,但是,我希望它找到其他团队?然而,这看起来比我的方法简单得多。我从来没有见过JOIN - > USING之前的语法,在MS SQL中不存在。我会读它:) – reedstonefood 2010-01-14 13:24:04
哦,对,这是有道理的。 :)我编辑了上面的代码来使用熟悉的'ON'语法,并删除了'TeamID'。 'USING'语法只是名称列的相等比较,假定列在两个表中都以相同名称存在。 – 2010-01-14 15:43:34