Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Komplexe IF-Anweisung mit 3 Tabellen

Verwenden Sie eine Unterauswahl mit Bedingungen, um die gesuchte fighter_id in column_a umzuwandeln, wenn sie sich in column_b befindet. Auf diese Weise vereinfacht es Ihre Operationen und fügt sich in die äußere Abfrage ein:

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

Auch wenn das Winner-Feld null ist, geben Sie einfach das Methodenfeld wieder. Auf diese Weise müssen Sie, wenn Sie Ihrem System eine weitere Art von Methode hinzufügen möchten, bei der der Gewinner null ist, nicht ständig mehr bedingte Prüfungen an Ihren CASE anheften Erklärung.