2016-06-03 3 views
0

Ich arbeite derzeit an einem 1v1 Online-Spiel und ich stieß auf ein Problem beim Versuch, Spieler zu vergleichen.Mysql Matchmaking/Pairing

Ein Spieler, der will, wird in ein Matchmaking-Tabelle

id, Benutzer, Menge

Jetzt möchte ich für die bestmöglichen Paare Benutzer die Tabelle Matchmaking abzufragen setzen spielen (also Benutzer, die wollen für den gleichen Betrag zu spielen) Ich möchte auch Benutzer, die länger warten (kleinere ID), zuerst paaren.

Bisher habe ich diese Anfrage:

SELECT * 
FROM matchmaking a, wpr_matchmaking b 
WHERE a.user != b.user 
AND a.amount = b.amount 
ORDER BY a.id ASC , b.id ASC 
LIMIT 0 , 30 

Diese alle möglichen Paarungen gibt, so in einer Tabelle mit folgendem Inhalt:

id, user, amount 
1, 1, 10 
2, 2, 10 
3, 3, 10 

ich die Paare erhalten:

1,2 
1,3 
2,1 
2,3 
3,1 
3,2 

Während ich in diesem Fall nur 1,2 zurückgeben möchte.

Wie kann ich es mir nur jeden Benutzer höchstens einmal anzeigen lassen?

Edit: Hinzufügen der Bedingung ‚und A.id < b.id‘ auf die Abfrage um einen Faktor von 2 die Paarungen reduziert, aber es gibt immer noch zu viele.

Antwort

-1

Möchten Sie nur das höchste Paar, das mit diesen übereinstimmen und dann die Abfrage erneut ausführen? Sie könnten SELECT TOP 1

+0

verwenden Leider brauche ich alle Übereinstimmungen, nicht nur eine. Wenn es in der Tabelle 4 Benutzer gibt: 1,2,3,4, die alle für den gleichen Betrag spielen, möchte ich "1,2" und "3,4" erhalten –