insert onder voorwaarden met joins

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan R

Jan R

28/06/2024 09:38:18
Quote Anchor link
Ji

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)
PHP script in nieuw venster Selecteer het PHP script
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
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
        )
    )


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

PHP hulp

24/12/2024 19:54:29
 

30/06/2024 20:53:01
Quote Anchor link
Wat je wilt heet een "conditional insert" en kan via de constructie INSERT INTO .. SELECT .. WHERE.

Het eerste deel van de qeury wordt dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
INSERT INTO vr(id_toernooi, ronde, rondenr, speler1, speler2)
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
WHERE (speler1 IN (924, 925) OR speler2 IN (924, 925))

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.
 
Jan R

Jan R

01/07/2024 18:50:35
Quote Anchor link
Bedankt.
met een paar probleempjes toch gelukt :)
 



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.