Sử dụng một lựa chọn con với các điều kiện để chuyển Fight_id bạn đang tìm kiếm thành column_a nếu nó nằm trong column_b, theo cách đó, nó đơn giản hóa các thao tác của bạn và tham gia vào truy vấn bên ngoài:
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
Ngoài ra, nếu trường chiến thắng là rỗng, thì chỉ cần lặp lại trường phương pháp. Bằng cách đó, khi bạn muốn thêm một loại phương pháp khác mà người chiến thắng là vô hiệu vào hệ thống của bạn, bạn không phải tiếp tục kiểm tra có điều kiện nữa cho CASE
của mình tuyên bố.