Предполагая, что у вас есть таблица (MatchID, Player1ID, Player2ID, Player1Score, Player2Score ...), с одной строкой для каждого матча (то есть без дублирования)
Вы можете получить все совпадения для игрока через:
SELECT * from Matches WHERE Player1ID = @ID OR Player2ID = @ID
Возможно, немного более полезно, однако, немного переставить данные, чтобы они всегда были игроком и противником:
SELECT MatchID, Player1ID, Player2ID, Player1Score, Player2Score ... FROM Matches where Player1ID = @ID
UNION
SELECT MatchID, Player2ID, Player1ID, Player2Score, Player1Score ... FROM Matches where Player2ID = @ID
(обратите внимание, что как идентификатор, так и порядок оценок меняются во втором операторе объединения)
Вы также можете обобщить это для построения статистики:
SELECT stats.Player, stats.Opponent, SUM(stats.PlayerWin) AS Wins, SUM(stats.Draw) AS Draws, SUM(stats.OpponentWin) AS Losses
FROM (
SELECT Player1ID AS Player, Player2ID AS Opponent,
CASE WHEN Player1Score > Player2Score THEN 1 ELSE 0 END AS PlayerWin,
CASE WHEN Player1Score = Player2Score THEN 1 ELSE 0 END AS Draw,
CASE WHEN Player2Score > Player1Score THEN 1 ELSE 0 END AS OpponentWin
UNION
SELECT Player2ID AS Player, Player1ID AS Opponent,
CASE WHEN Player2Score > Player1Score THEN 1 ELSE 0 END AS PlayerWin,
CASE WHEN Player2Score = Player1Score THEN 1 ELSE 0 END AS Draw,
CASE WHEN Player1Score > Player2Score THEN 1 ELSE 0 END AS OpponentWin
) stats
GROUP BY stats.Player, stats.Opponent
Полагаю, моя общая мысль в том, что вы можете сделать это в любом случае, они примерно одинаково сложны (если вы помещаете данные в базу данных дважды, вы должны убедиться, что вы синхронизируете их при обновлении. данные в базу данных один раз, вы должны считать их дважды, когда вы делаете статистику. Кроме того, если вы помещаете данные в базу данных дважды, это немного усложняет ситуацию со стороны базы данных, поскольку MatchID больше не будет уникальным.)