Mysql
 sql >> Base de données >  >> RDS >> Mysql

Instruction IF complexe avec 3 tables

Utilisez une sous-sélection avec des conditions pour basculer le fighter_id que vous recherchez vers column_a s'il se trouve dans column_b, de cette façon, cela simplifie vos opérations et rejoint la requête externe :

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

De plus, si le champ gagnant est nul, faites simplement écho au champ méthode. De cette façon, lorsque vous souhaitez ajouter un autre type de méthode où le gagnant est nul à votre système, vous n'avez pas besoin de continuer à ajouter d'autres contrôles conditionnels à votre CASE déclaration.