vergelijk op records in dezelfde table

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mar kla

mar kla

31/03/2016 22:58:25
Quote Anchor link
L.s.

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
 
PHP hulp

PHP hulp

30/11/2020 08:09:38
 
Jan de Laet

Jan de Laet

01/04/2016 07:35:09
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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.
 
Mar kla

mar kla

01/04/2016 09:08:46
Quote Anchor link
helemaal top!!

Ik heb een kleine toevoeging gedaan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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
 
Jan de Laet

Jan de Laet

01/04/2016 09:38:07
Quote Anchor link
Zou het kunnen dat speler 120 en 171 het spel vaker gespeeld hebben? Dus verschillende rijen met andere af_Detail_ID.


Met SELECT DISTINCT A.af_Game_ID, ...... voorkom je dubbele resultaten
 
Mar kla

mar kla

01/04/2016 09:42:01
Quote Anchor link
Ik had dus een denkfout met af_DetailType_ID gemaakt.

Het werkt nu net zoals ik zou willen.

Dus erg bedankt!!
Gewijzigd op 01/04/2016 09:43:23 door mar kla
 
Jan de Laet

Jan de Laet

01/04/2016 10:04:08
Quote Anchor link
Mooi.
Je kunt dan evt ook A.af_DetailType_ID = B.af_DetailType_ID bij de ON zetten in de JOIN
 
Mar kla

mar kla

01/04/2016 10:09:55
Quote Anchor link
Oke,

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!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.