Ik ben nu al meer dan een uur bezig om een query van (voor mijn doen) monsterlijke proporties in elkaar te krijgen en zie door de bomen het bos niet meer. Ik begin me inmiddels af te vragen of wat ik wil überhaupt mogelijk is. Maar voor ik de handdoek definitief in de ring gooi, check ik het nog even met de helden op GoT. Kleine noot: ik ben geen zeer ervaren backenddeveloper. Als jullie hieronder structurele denkfouten zien, dan word ik daar graag op gewezen 
Scenario in het kort: er is een spel dat bestaat uit 3 rondes. Nadat je een ronde gespeeld hebt kun je iemand uitdagen, die persoon moet dan proberen een hogere score te halen. Andersom kun jij ook uitgedaagd worden (zolang je nog rondes over hebt). Ik heb de volgende tabellen:
Nu heb ik de volgende query in elkaar gedraaid, in dit geval voor de speler met id 1:
Dit geeft mij netjes alle data terug van de rondes waarin speler 1 de uitdager is. Maar: hoe kom ik nu aan de rondes waarin speler 1 juist de uitgedaagde is? Het enige wat ik me kan bedenken is nóg een join op de challenge- en player-tabel, maar dan krijg ik natuurlijk geen aparte rows terug.
Kortom: ik zit met mijn handen in het haar. Wie geeft mij een zetje in de goede richting? Of is wat ik wil sowieso niet mogelijk in deze opzet?
Scenario in het kort: er is een spel dat bestaat uit 3 rondes. Nadat je een ronde gespeeld hebt kun je iemand uitdagen, die persoon moet dan proberen een hogere score te halen. Andersom kun jij ook uitgedaagd worden (zolang je nog rondes over hebt). Ik heb de volgende tabellen:
- Player: de spelerinformatie
- Score: de gegevens van een gespeelde ronde
- Challenge: een koppeltabel met verwijzingen naar 2 scores (uitdager en uitgedaagde) en 2 spelers (uitdager en uitgedaagde)
Nu heb ik de volgende query in elkaar gedraaid, in dit geval voor de speler met id 1:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| SELECT s.id AS id, s.round AS round, s.score AS score_player, x.score AS score_opponent, c.accepted, o.name AS opponent_name FROM score s LEFT JOIN challenge c ON (c.challenger_score_id = s.id) LEFT JOIN player o ON (c.challengee_id = o.id) LEFT JOIN score x ON (c.challengee_score_id = x.id) WHERE s.player_id = 1 ORDER BY round ASC |
Dit geeft mij netjes alle data terug van de rondes waarin speler 1 de uitdager is. Maar: hoe kom ik nu aan de rondes waarin speler 1 juist de uitgedaagde is? Het enige wat ik me kan bedenken is nóg een join op de challenge- en player-tabel, maar dan krijg ik natuurlijk geen aparte rows terug.
Kortom: ik zit met mijn handen in het haar. Wie geeft mij een zetje in de goede richting? Of is wat ik wil sowieso niet mogelijk in deze opzet?