0

ここに問題があります: -

次のフィールドを持つ「MatchResults」と呼ばれるスポーツの試合の結果のテーブルがあります

Player1 Player2 Player1GamesWon Player2GamesWon Player1Pts Player2Pts League_id

最初に、私がすでに持っている格納された変数を使用してこのテーブルをフィルタリングするクエリを実行しているため、行のコレクションが短くなります:-

$qry = "SELECT * FROM BadmintonMatchResults WHERE league_id = '$leagueid'";

上記のクエリから生成された各行を実行し、値を使用して「LeagueTable」という別のテーブルを更新する必要があります。LeagueTable の構造は次のとおりです。

member_id プレイした勝ったゲームに負けたゲームに勝った負けた差ポイント

これらの更新は、次のようないくつかの SQL クエリの形式を取ります。

$qry = mysql_query("UPDATE LeagueTable SET Played = Played + 1 WHERE member_id = '$p1id'");
$qry = mysql_query("UPDATE LeagueTable SET Played = Played + 1 WHERE member_id = '$p2id'");

if($p1pts > $p2pts) {
    $qry = mysql_query("UPDATE LeagueTable SET Won = Won + 1 WHERE member_id = '$p1id'");
    $qry = mysql_query("UPDATE LeagueTable SET Lost = Lost + 1 WHERE member_id = '$p2id'"); 
}
else if($p2pts > $p1pts) {
    $qry = mysql_query("UPDATE LeagueTable SET Won = Won + 1 WHERE member_id = '$p2id'");
    $qry = mysql_query("UPDATE LeagueTable SET Lost = Lost + 1 WHERE member_id = '$p1id'"); 
}

$qry = mysql_query("UPDATE LeagueTable SET GamesWon = GamesWon + '$p1won' WHERE member_id = '$p1id'");
$qry = mysql_query("UPDATE LeagueTable SET GamesWon = GamesWon + '$p2won' WHERE member_id = '$p2id'");  
$qry = mysql_query("UPDATE LeagueTable SET GamesLost = GamesLost + '$p1won' WHERE member_id = '$p2id'");
$qry = mysql_query("UPDATE LeagueTable SET GamesLost = GamesLost + '$p2won' WHERE member_id = '$p1id'");

$qry = mysql_query("UPDATE LeagueTable SET Difference = GamesWon - GamesLost");
$qry = mysql_query("UPDATE LeagueTable SET Points = Points + '$p1pts' WHERE member_id = '$p1id'");
$qry = mysql_query("UPDATE LeagueTable SET Points = Points + '$p2pts' WHERE member_id = '$p2id'");

現在、フォームに入力されたデータからこれを行っているため、 $variables を無視しますが、代わりに別のデータベースの行を使用するように変更したいと考えています。また、クエリを要約して組み合わせることができることも知っています。主な問題は、このクエリのコレクションをさまざまな値のセットに対して複数回ループすることです。

私の質問は:-

  1. 実行する必要があるクエリで最初のテーブルのフィールドを参照するにはどうすればよいですか? 明らかに、フィールド名「Player1」をリストするだけでは機能しません。
  2. 各行をループして、上記の 2 つのクエリとさらに 8 つの同様のクエリを実行するにはどうすればよいですか。

注: これらのクエリの一部は既に IF ステートメント内にネストされているため、ループはその外側に移動する必要があります。

どんな助けでも大歓迎です!

4

1 に答える 1

0

そのようにする場合は、SQL ステートメントで使用する前にデータをサニタイズしていることを教えてください。入力として「 0' または 1=1 」と入力すると、SQL は期待どおりに動作しません。

あるデータから次のデータへの参照名でデータを切り取って使用するには、次のようにします。

if(mysql_num_rows($result)>0){
    while($row = mysql_fetch_assoc($result)){

        // ... your loop here code here
        mysql_query("UPDATE LeagueTable SET Played = Played + 1 WHERE member_id = '" . $row['Player1'] . "'");

    }
}

正直なところ、MySQL ソケットを非常にハードに動作させているため、これはまだ非常に非効率的な方法を取っているように見えます。保存する必要がある計算の量と、集計 SQL クエリで実行できる計算の数を検討します。

于 2013-03-29T13:10:46.733 に答える