yo,
SELECT
battle.*, tu.userID, user.username
FROM user_to_tournaments tu
LEFT JOIN users user ON (user.userID = tu.userID)
LEFT JOIN tournament_battles battle
ON (battle.opponentID = tu.userID OR battle.challengerID = tu.userID)
WHERE tu.tournamentID = 1
der erste LEFT JOIN ist schon mal überflüssig, du kannst zwischen users und users\_to\_tournaments, bzw. tournaments einen INNER JOIN machen, schließlicnh willst du ja nur die user haben, die am einem bestimmten tournament teilnehmen haben. die tabelle tounraments kannm an natürlich auch weglassen, falls man wirklich keine spalten von der tabelle anzeigen will (in dem fall musst du die abfrage anpassen). auch würde ich von den users losgehen und die tabelle tournament\_battles mit einem OUTER JOIN einbinden, ließt sich einfach logischer, also:
SELECT ...
FROM users u
INNER JOIN user\_to\_tournaments ut ON bedingung
INNER JOIN tournaments t ON bedingung
INNER JOIN tournament\_battles tb ON bedingung
WHERE ut.tournamentID = 1
;
des weieren fehlt mir in der JOIN bedingung der tabelle tournament\_battles die verbindung zu den tournaments. es reicht nicht, sie nur mit der user tabelle zu verbinden, sprich:
ON (tb.opponentID = u.userID OR tb.challengerID = tu.userID) AND tb.tournamentID = t.tournamentID
Ilja