Użyj podwyboru z warunkami warunkowymi, aby zmienić fighter_id, którego szukasz, na column_a, jeśli jest w column_b, w ten sposób uprości to twoje operacje i sprzężenia w zewnętrznym zapytaniu:
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
Ponadto, jeśli pole zwycięzcy ma wartość null, po prostu wyświetl pole metody. W ten sposób, jeśli chcesz dodać do swojego systemu jeszcze jeden rodzaj metody, w której zwycięzca ma wartość null, nie musisz wprowadzać więcej warunkowych sprawdzeń do swojego CASE
oświadczenie.