0

新しいボクサーがデータベースに追加されたときに不明なボクサー ID を修正するために、アプリケーションに次のクエリがあります。システム内の他のクエリと機能をより簡単にするために、試合が追加されると、boxer_1ID は常に ID より小さくなりboxer_2ます。

boxer_1以下の関数はandboxer_2フィールドを更新/切り替えるのに完全に機能しているように見えますが、 boxer_1_weightandのboxer_2_weight値が奇妙な結果になり、その理由がわかりません。

"UPDATE bouts b1, bouts b2 SET b1.unknown_global_id = 0,
                    b1.winner = IF(b2.winner = -3, IF(b1.boxer_1 = 0, '" . $boxer_id . "', b1.boxer_1), IF(b2.winner = -2, IF(b1.boxer_2 = 0, '" . $boxer_id . "', b1.boxer_2), b1.winner)),
                    b1.boxer_1 = IF(b1.boxer_1 = 0, IF('" . $boxer_id . "' > b1.boxer_2, b1.boxer_2, '" . $boxer_id . "'), IF(b1.boxer_1 < '" . $boxer_id . "', b1.boxer_1, '" . $boxer_id . "')), 
                    b1.boxer_2 = IF(b1.boxer_2 = 0, IF('" . $boxer_id . "' < b2.boxer_1, b2.boxer_1, '" . $boxer_id . "'), IF(b1.boxer_2 > '" . $boxer_id . "', b1.boxer_2, '" . $boxer_id . "')),
                    b1.boxer_1_weight = IF(b2.boxer_1 = 0, IF('" . $boxer_id . "' > b2.boxer_2, b2.boxer_2_weight, b2.boxer_1_weight), IF(b2.boxer_1 < '" . $boxer_id . "', b2.boxer_1_weight, b2.boxer_2_weight)),
                    b1.boxer_2_weight = IF(b2.boxer_2 = 0, IF('" . $boxer_id . "' < b2.boxer_1, b2.boxer_1_weight, b2.boxer_2_weight), IF(b2.boxer_2 > '" . $boxer_id . "', b2.boxer_2_weight, b2.boxer_1_weight))
                    WHERE b1.unknown_global_id = '" . (int)$global_id . "'"

boxer_1/boxer_2フィールドは INT(11) で、boxer_1_weight/boxer_2_weightフィールドは decimal(10,1) です

例として、重みフィールドが重み 186.5 と 199.7 で始まる場合、クエリを実行した後、両方とも 239.8 になりますが、ボクサー ID は正しいです。

4

1 に答える 1

1

b1で選択した行を の他のすべての行と比較しないようにするには、結合条件が必要ですb2

"UPDATE bouts b1
        JOIN bouts b2 ON b1.bout_id = b2.bout_id
        SET b1.unknown_global_id = 0,
            b1.winner = IF(b2.winner = -3, IF(b1.boxer_1 = 0, '" . $boxer_id . "', b1.boxer_1), IF(b2.winner = -2, IF(b1.boxer_2 = 0, '" . $boxer_id . "', b1.boxer_2), b1.winner)),
            b1.boxer_1 = IF(b1.boxer_1 = 0, IF('" . $boxer_id . "' > b1.boxer_2, b1.boxer_2, '" . $boxer_id . "'), IF(b1.boxer_1 < '" . $boxer_id . "', b1.boxer_1, '" . $boxer_id . "')), 
            b1.boxer_2 = IF(b1.boxer_2 = 0, IF('" . $boxer_id . "' < b2.boxer_1, b2.boxer_1, '" . $boxer_id . "'), IF(b1.boxer_2 > '" . $boxer_id . "', b1.boxer_2, '" . $boxer_id . "')),
            b1.boxer_1_weight = IF(b2.boxer_1 = 0, IF('" . $boxer_id . "' > b2.boxer_2, b2.boxer_2_weight, b2.boxer_1_weight), IF(b2.boxer_1 < '" . $boxer_id . "', b2.boxer_1_weight, b2.boxer_2_weight)),
            b1.boxer_2_weight = IF(b2.boxer_2 = 0, IF('" . $boxer_id . "' < b2.boxer_1, b2.boxer_1_weight, b2.boxer_2_weight), IF(b2.boxer_2 > '" . $boxer_id . "', b2.boxer_2_weight, b2.boxer_1_weight))
        WHERE b1.unknown_global_id = '" . (int)$global_id . "'"
于 2013-06-01T10:32:41.597 に答える