私は mySQL/PHP で書いていますが、この問題があり、理解できません。この 1 つの PHP スクリプトには、2 つの SQL ステートメントが含まれています。私がやろうとしているのは、スポーツ リーグ テーブル (tblrank と呼ばれる SQL テーブル - テーブル ID で区切られた多くのリーグ テーブルを含む) を更新し、最後に更新されてからチームが上昇したか下降したかを示すことです。この最初のコードは少しぎこちなく、おそらくもっとうまく書けたはずです (MSSQL では約 6 行で記述できます)。これは、それより下位にランク付けされたチームの数を数えてから 1 つ追加することによって機能します。後で説明するように、うまくいくようです... ある種。
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 で実行する前は、TableID =1 のレコードを除いてすべてのランクが 1 です)。これは明らかに私が望むものではありません。
どちらのステートメントも if(mysql_query($sql)) 条件内にあるため、実行されたかどうかを確認できます。
私は mySQL よりも MS SQL をよく使用するので、専門家ではありません。コードの両方のチャンクが実行されることを確認しました。2 つの間で他の SQL は実行されません。