J'ai une table:
+----------+-----------+----------+--------+
| id | winnerId | loserId | gameId |
+----------+-----------+----------+--------+
| 1 | user1 | user2 | 1 |
| 2 | user2 | user1 | 1 |
| 3 | user1 | user2 | 1 |
| 4 | user1 | user2 | 2 |
5 user1 user3 1
+----------+-----------+----------+--------+
en fait, j'ai plusieurs colonnes dans la table mais ils sont unreleated, mais s'il vous plaît considérer que
Étant donné winnerId, loserId et gameid je voudrais obtenir des scores totaux (gagner nombre) des joueurs de gagnant et perdant les uns contre les autres
Exemple d'entrée de requête:
winnerId:user1
loserId:user2
gameId:1
Résultat:
--userId--totalScore--
user1 2
user2 1
Sélectionnez les lignes où les deux joueurs ont joué les uns contre les autres. Comptez ensuite les lignes par gagnant pour le jeu:
select winnerid, count(*)
from mytable
where gameid = 1
and (winnerid, loserid) in ((1,2), (2,1))
group by winnerid;
Démo: https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=976df92c9706c08d34a1c372735efa4c
EDIT: Si l' un des joueurs n'a jamais gagné contre l'autre, il n'y aura pas de ligne à compter. Si vous voulez voir une ligne de résultat avec un nombre de zéro dans ce cas, vous devez d' abord créer une ligne. Une façon est la suivante:
select playerid, sum(won)
from
(
select winnerid as playerid, 1 as won
from mytable
where gameid = 1
and (winnerid, loserid) in ((1,2), (2,1))
union all
select loserid as playerid, 0 as won
from mytable
where gameid = 1
and (winnerid, loserid) in ((1,2), (2,1))
)
group by playerid
order by playerid;