Mysql
 sql >> Database >  >> RDS >> Mysql

Istruzione IF complessa con 3 tabelle

Usa una sottoselezione con condizionali per cambiare il combattente_id che stai cercando in column_a se è in column_b, in questo modo, semplifica le tue operazioni e si unisce alla query esterna:

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

Inoltre, se il campo del vincitore è nullo, fai semplicemente eco al campo del metodo. In questo modo, quando vuoi aggiungere un altro tipo di metodo in cui il vincitore è nullo al tuo sistema, non devi continuare ad applicare ulteriori controlli condizionali al tuo CASE dichiarazione.