vergelijk op records in dezelfde table
ik heb een database met daarin onder andere de volgende velden
af_Detail_ID
af_Game_ID
af_Player_ID
Iedere record bevat voor iedere wedstrijd het af_Game_ID van die wedstrijd.
Daarnaast staat er per record de af_Player_ID in.
Nu ben ik op zoek naar een (my)Sql query om waar mee ik kan "filteren" hoeveel wedstrijd (af_Game_ID) twee spelers (af_Player_ID) samen hebben gespeeld.
de input is dat dat ik twee waardes zou willen kunnen ingeven stel:
speler A heeft af_Player_ID=130
speler b heeft af_Player_ID=120
Het resultaat zou dan iets van
af_Game_ID af_Player_ID_A af_Player_ID_B
123 130 120
124 130 120
240 130 120
Of misschien is een lijst van af_Game_ID waarin beide gespeeld hebben wel genoeg, maar ter controle zou ik toch per resultaat regel de af_Player_ID van iedere speler willen zien.
Ik vermoed dat ik iets met een inner join o.i.d. moet doen, maar ik kom er niet uit.
wie helpt mij op weg?
Alvast erg veel dank
Code (php)
1
2
3
4
2
3
4
SELECT A.af_Game_ID, A.af_Player_ID AS af_Player_ID_A, B.af_Player_ID AS af_Player_ID_B
FROM TblGames A
JOIN TblGames B ON B.af_Game_ID = A.af_Game_ID AND B.af_Player_ID <> A.af_Player_ID
FROM TblGames A
JOIN TblGames B ON B.af_Game_ID = A.af_Game_ID AND B.af_Player_ID <> A.af_Player_ID
Je koppelt hier de tabel aan zichzelf waar af_Game_ID hetzelfde is, maar de af_Player_ID niet (ander zou je ook de regel zien voor de eigen game van de speler.
Door de alias A en B kun je aangeven uit welke tabel je de gegevens wilt gebruiken.
Ik heb een kleine toevoeging gedaan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT A.af_Game_ID,
A.af_Player_ID AS Player_A,
B.af_Player_ID AS Player_B,
A.af_DetailType_ID AS Detail
FROM af_details A
JOIN af_details B ON B.af_Game_ID = A.af_Game_ID
AND B.af_Player_ID <> A.af_Player_ID
WHERE (B.af_Player_ID =171 and A.af_Player_ID =120)
AND A.af_DetailType_ID= 1
ORDER BY A.af_Game_ID,
A.af_Player_ID ASC
A.af_Player_ID AS Player_A,
B.af_Player_ID AS Player_B,
A.af_DetailType_ID AS Detail
FROM af_details A
JOIN af_details B ON B.af_Game_ID = A.af_Game_ID
AND B.af_Player_ID <> A.af_Player_ID
WHERE (B.af_Player_ID =171 and A.af_Player_ID =120)
AND A.af_DetailType_ID= 1
ORDER BY A.af_Game_ID,
A.af_Player_ID ASC
maar nu krijg ik soms dubbele records
af_Game_ID Player_A Player_B Detail
00003 0120 0171 1
00003 0120 0171 1
00005 0120 0171 1
00006 0120 0171 1
00144 0120 0171 1
00145 0120 0171 1
00145 0120 0171 1
00146 0120 0171 1
00149 0120 0171 1
00150 0120 0171 1
update
ik heb het gevonden
AND A.af_DetailType_ID =1
AND B.af_DetailType_ID =1
Gewijzigd op 01/04/2016 09:35:49 door mar kla
Met SELECT DISTINCT A.af_Game_ID, ...... voorkom je dubbele resultaten
Het werkt nu net zoals ik zou willen.
Dus erg bedankt!!
Gewijzigd op 01/04/2016 09:43:23 door mar kla
Je kunt dan evt ook A.af_DetailType_ID = B.af_DetailType_ID bij de ON zetten in de JOIN
Ik ben nu ook even aan het kijk hoe ik het verder kan uitbreiden.
Want speler A en B kunnen ook wel in dezelfde wedstrijd gespeeld hebben ...maar niet gelijk tijdig om A er uit gewisseld is en B er dan in kwam.
Maar de basis query die ik nu heb is een heel goed begin waar ik zeker mee vooruit kan!