insert onder voorwaarden met joins
Ik wil een record invoegen met voorwaarden vanuit meerdere tabellen
Onderstaande code werkt voor een select maar hoe kan ik dit voor een insert
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
INSERT into vr(id_toernooi, ronde, rondenr, speler1, speler2) values
(75,
1,
181,
924,
925
)
from
TRN__volgenderonde vr
JOIN
trn__volgenderondeinfo vri
on vri.id=vr.ronde
where
(
ronde=181 AND
max_games_same_player> (
SELECT
count(id)
from
trn__volgenderonde v2
WHERE
v2.id_toernooi=vr.id_toernooi AND
vr.speler1 in (v2.speler1, v2.speler2) AND
v2.ronde=vr.ronde AND
true
) AND
max_games_same_player> (
SELECT
count(id)
from
trn__volgenderonde v2
WHERE
v2.id_toernooi=vr.id_toernooi AND
vr.speler2 in (v2.speler1, v2.speler2) AND
v2.ronde=vr.ronde AND
true
) AND
(
speler1=924 OR
speler2=924 OR
speler1=925 OR
speler2=925 OR
false
)
)
(75,
1,
181,
924,
925
)
from
TRN__volgenderonde vr
JOIN
trn__volgenderondeinfo vri
on vri.id=vr.ronde
where
(
ronde=181 AND
max_games_same_player> (
SELECT
count(id)
from
trn__volgenderonde v2
WHERE
v2.id_toernooi=vr.id_toernooi AND
vr.speler1 in (v2.speler1, v2.speler2) AND
v2.ronde=vr.ronde AND
true
) AND
max_games_same_player> (
SELECT
count(id)
from
trn__volgenderonde v2
WHERE
v2.id_toernooi=vr.id_toernooi AND
vr.speler2 in (v2.speler1, v2.speler2) AND
v2.ronde=vr.ronde AND
true
) AND
(
speler1=924 OR
speler2=924 OR
speler1=925 OR
speler2=925 OR
false
)
)
Bedoeling is om toernooi, ronde, rondenr en 2 spelers in te brengen indien het maximum (max_games_same_player uit een andere tabel) niet overschreden wordt.
Anders moet ik eerst php laten controleren of het max niet overschreden wordt.
Jan
Gewijzigd op 28/06/2024 09:39:04 door Jan R
Het eerste deel van de qeury wordt dan:
Code (php)
1
2
2
INSERT INTO vr(id_toernooi, ronde, rondenr, speler1, speler2)
SELECT 75, 1, 181, 924, 925
SELECT 75, 1, 181, 924, 925
Voor een SELECT heb je niet per se FROM nodig. Na een WHERE statement volgt een expressie waar eventueel ook weer sub-SELECTs in opgenomen kunnen worden. Evalueert het als TRUE, dan wordt de SELECT uitgevoerd en kan INSERT INTO zijn werk doen. Evalueert de WHERE-expressie naar FALSE, dan heeft INSERT INTO niets te doen.
Het wordt me uit je query niet helemaal duidelijk wat er na de WHERE moet volgen.
In ieder geval wel:
De logica van de andere subqueries volg ik even niet omdat ik niet precies weet waar de tabellen en kolommen voor zijn. Wat ik wel weet is dat AND TRUE altijd waar is en dus kan worden weggelaten.
En ik kan je aanraden om prepared statements te gaan gebruiken, dan kunnen de literals (waarden) vervangen worden voor placeholders als $1, $2, etc.
met een paar probleempjes toch gelukt :)