Använd ett underval med villkor för att byta fighter_id du letar efter till column_a om det finns i column_b, på det sättet förenklar det dina operationer och går med i den yttre frågan:
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
Dessutom, om vinnarfältet är null, upprepa bara metodfältet. På det sättet, när du vill lägga till ytterligare en typ av metod där vinnaren är null till ditt system, behöver du inte fortsätta med mer villkorade kontroller av ditt CASE
uttalande.