sql >> データベース >  >> RDS >> Mysql

3つのテーブルを持つ複雑なIFステートメント

    条件付きの副選択を使用して、探しているfighter_idがcolumn_bにある場合はcolumn_aに切り替えます。これにより、操作が簡素化され、外部クエリに結合されます。

    SELECT
        (
            CASE
                WHEN a.winner = a.f_a THEN 'Win'
                WHEN a.winner = a.f_b THEN 'Loss'
                WHEN a.winner IS NULL THEN a.method
            END
        ) AS result,
        b.name AS opponent,
        a.method AS method,
        c.event_name AS event,
        c.event_date AS date
    FROM
        (
            SELECT 
                IF(fighter_b = $fighter_id, fighter_b, fighter_a) AS f_a,
                IF(fighter_b = $fighter_id, fighter_a, fighter_b) AS f_b,
                winner,
                method,
                event
            FROM 
                fights
            WHERE
                $fighter_id IN (fighter_a, fighter_b)
        ) a
    INNER JOIN
        fighters b ON a.f_b = b.fighter_id
    INNER JOIN
        events c ON a.event = c.event_id
    ORDER BY
        c.event_date DESC
    

    また、勝者フィールドがnullの場合は、メソッドフィールドをエコーするだけです。そうすれば、勝者がnullである別のタイプのメソッドをシステムに追加する場合、CASEにさらに条件付きチェックを追加し続ける必要はありません。 ステートメント。



    1. 一致した配列要素を除外する

    2. MySQL 5.7の部分パスを使用したディープJSONクエリ?

    3. PDOMySQLを使用したPHP5.1.6のコンパイル

    4. Selectステートメントでの変数の宣言と設定