0

1週間前に関連する質問をしましたが、私が直面している別の問題があります。私はそのような初心者のように感じますが、決して学ばないよりも、尋ねて学ぶ方が良いと思います。

これが私の3つのテーブルです。

ファイターズテーブル

fighter_id, name

イベントテーブル

event_id, event_name, event_date

ファイトテーブル

fight_id, fighter_a, fighter_b, winner, method, event

したがって、fightsテーブルでは、fighter_a、fighter_b、およびwinnerは、Fightersテーブルのfighter_idに対応する整数です。

私は基本的に、fighter_idに基づいてデータを取得するページにいます。

私は、対戦相手の名前、結果(勝ち、負け、引き分け、またはnc)、メソッド、event_name、およびevent_dateを含む、その戦闘機の各戦闘で行を作成しようとしています。抽選またはコンテストなしの場合は、[メソッド]列に[抽選]または[コンテストなし]と表示されますが、勝者はNULLになります。

私はこれらのMySQLIFステートメントを調べて、戦闘機が勝ったか、負けたか、引き分けになったか、またはコンテストに参加しなかったかを判断するための適切な基準を作成しました。これらのステートメントはPHPmysql_queryで使用できるようには見えませんが、少なくとも基準のアイデアは得られます。これらの3つのテーブルを内部結合する必要があることはわかっていますが、勝者/敗者などを決定する方法がわかりません... fighter_aまたはfighter_bが勝者になることも、どちらも勝者になることもできないためです。MySQLクエリでこれらのIFステートメントにアプローチする方法がわかりません。

IF winner IS NOT NULL AND winner=fighter_id THEN SET record='win';
ELSEIF winner IS NOT NULL AND winner<>fighter_id THEN SET record='loss';
ELSEIF winner IS NULL AND method='Draw' THEN SET record='draw';
ELSEIF winner IS NULL AND method='No Contest' THEN SET record='no contest';
ELSE SET record='';
ELSE IF;

次のようなテーブルで結果を取得しようとしています:http: //en.wikipedia.org/wiki/Fedor_Emelianenko#Mixed_martial_arts_record

4

1 に答える 1

1

私の理解が正しければ、CASE ステートメントを使用して結果を判断することをお勧めします。戦闘機は、次のように参加する必要があります。

select 
    fight_id,
    CASE
      WHEN winner is not null and winner=fighter_id then 'win'
      WHEN winner is not null and winner<>fighter_id then 'loss'
      WHEN winner is null and method='Draw' then 'draw'
      WHEN winner is null and method = 'No Contest' then 'no contest'
      ELSE ''
    END as match_result,
    participant.name 'participant',
    opponent.name 'opponent'
FROM fights
    INNER JOIN fighters as participant on participant.fighter_id = fights.fighter_a
    INNER JOIN fighters as oppoent on opponent.fighter_id = fights.fighter_b
于 2012-06-12T02:33:28.487 に答える