Ik loop vast met opzoeken gegevens
Ik ben bezig met mijn competitieprogramma uit te breiden naar meerdere ronden tot (voorbeeld) 10 maal iedereen tegen iedereen. Vroeger 1 of 2 keer.
Ik loop vast in het zoeken naar de her-programmatie van de partijen. Dit is vergelijkbaar met uitgestelde matchen in andere sporten zoals voetbal en basketbal. Verschil is dus niet 1 maal tegen iedereen, 1 X thuis en 1 X op verplaatsing maar tot 5 X thuis en verplaatsing.
Probleem is dus dat ik partij speler X tegen speler Y ook 5 X kan tegenkomen en dus ook 5 X moet gepland worden.
Zodra de planning is gebeurd krijg ik de gegevens terug van de 5 planningen op de 5 verschillende dagen.
Ik kan niet verwijzen naar de partij op zich want deze zijn nog niet gespeeld en hebben dus geen partij_id
Iemand een idee om dit op te lossen? Alle ideeën zijn goed. Ik kan velden/tabellen bijmaken indien nodig
Hier de query's
Ophalen speeldagen
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
select
id,
DATE_FORMAT(datum, "%d/%m/%Y") as datumfmt,
datum,
naam
from
TR2__volgenderondeinfo
where
(id_toernooi=' . $ACTIEFTOERNOOI->ID . ')'
id,
DATE_FORMAT(datum, "%d/%m/%Y") as datumfmt,
datum,
naam
from
TR2__volgenderondeinfo
where
(id_toernooi=' . $ACTIEFTOERNOOI->ID . ')'
Ophalen geplande partijen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SELECT
r.id,
concat(s1.voornaam," ",s1.naam) wit,
s1.id wit_id,
s2.id zwart_id,
concat(s2.voornaam," ",s2.naam) zwart,
(COALESCE((select uitslag from TR2__partijen p2 where speler1=s1.id and speler2=s2.id and p2.ronde=p1.ronde) , "")) uitslag,
(COALESCE((select uitsteller from TR2__partijen p2 where speler1=s1.id and speler2=s2.id and p2.ronde=p1.ronde), "")) uitsteller,
COALESCE(o.opmerking, "") opmerking,
p1.datum,
p1.ronde
FROM
TR2__spelers s1
JOIN
TR2__spelers s2
LEFT JOIN
TR2__volgenderonde r
ON s1.id = r.speler1
AND s2.id = r.speler2
left join
TR2__volgenderondeinfo_opmerkingen o
on o.volgenderondeinfo_id = r.id
left JOIN
TR2__partijen p1
on p1.speler1=r.speler1 and p1.speler2=r.speler2
where
r.ronde=' . $rij['id'] . ' AND #id volgens volgenderondeinfo
true
order by
wit,
zwart;
r.id,
concat(s1.voornaam," ",s1.naam) wit,
s1.id wit_id,
s2.id zwart_id,
concat(s2.voornaam," ",s2.naam) zwart,
(COALESCE((select uitslag from TR2__partijen p2 where speler1=s1.id and speler2=s2.id and p2.ronde=p1.ronde) , "")) uitslag,
(COALESCE((select uitsteller from TR2__partijen p2 where speler1=s1.id and speler2=s2.id and p2.ronde=p1.ronde), "")) uitsteller,
COALESCE(o.opmerking, "") opmerking,
p1.datum,
p1.ronde
FROM
TR2__spelers s1
JOIN
TR2__spelers s2
LEFT JOIN
TR2__volgenderonde r
ON s1.id = r.speler1
AND s2.id = r.speler2
left join
TR2__volgenderondeinfo_opmerkingen o
on o.volgenderondeinfo_id = r.id
left JOIN
TR2__partijen p1
on p1.speler1=r.speler1 and p1.speler2=r.speler2
where
r.ronde=' . $rij['id'] . ' AND #id volgens volgenderondeinfo
true
order by
wit,
zwart;
Jan
Jan R op 23/07/2023 09:05:50:
Ik kan niet verwijzen naar de partij op zich want deze zijn nog niet gespeeld en hebben dus geen partij_id
Die "dus" is geen vanzelfsprekendheid, maar een beperking die je jezelf hebt opgelegd.
Kun je bijvoorbeeld een tijdelijke ID introduceren die je UPDATE nadat de partij is gespeeld?
Ward van der Put op 23/07/2023 10:17:29:
Kun je bijvoorbeeld een tijdelijke ID introduceren die je UPDATE nadat de partij is gespeeld?
En hoe zie je dat?
Ik heb zelf al gedacht om ALLE partijen in te brengen bij het maken van het toernooi maar gezien het aantal spelers niet altijd vast ligt is dit bijna onmogelijk of moet volledig herrekend worden bij het wijzigen van de volgorde van de spelers en bij toevoegen verwijderen van spelers.
Overkill :)
TR2__spelers s1
JOIN
TR2__spelers s2
weet je zeker dat hier geen ON achter moet?
Nee het is een "cross join". Zoals vermeld iedereen tegen iedereen.