[SQL] multiple IN multiple

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rudie dirkx

rudie dirkx

13/12/2007 13:28:00
Quote Anchor link
Ik heb drie tabellen:
t1. r_d_available( id, name )
t2. r_d_per_planet( r_d_id, planet_id, eta ) [r_d_id is FK voor t1.id]
t3. r_d_requires( r_d_id, r_d_requires_id ) [beide zijn FK's voor t1.id]

De pure-data tabel is dus r_d_available.
In r_d_per_planet staat per gebruiker welke r_d er bezig en klaar zijn en hoelang het nog duurt voordat ie klaar is (`eta`).
In r_d_requires staat welke r_d er nodig is (klaar: `eta` = 0) om deze r_d te starten.

Misschien is het niet helemaal duidelijk:
r_d_available heeft 10 rijen, `id` 1 t/m 10
r_d_per_planet heeft 2 rijen: (1,X,0) en (2,X,2)
r_d_requires heeft twee rijen: (3,1) en (3,2)
Ofwel:
- Voor r-d's 1 en 2 zijn geen 'requirements'.
- r-d 1 is al klaar.
- r-d 2 moet nog 2 ticks en is dan klaar.
- r-d 3 heeft r-d's 1 EN 2 nodig om te mogen starten.

De query moet een resultaat geven, zo dat alle r-d worden weergegeven die 'toegestaan' zijn: aan alle requirements is voldaan. Voor sommige r-d zijn er dat 0, voor de meeste 1 en voor anderen 2 of 3. Elke rij in r_d_available heeft dus 0, 1, 2 of 3 rijen in r_d_requires.

Ik wil een lijst van alle r_d_available waarvan de r_d_id's van de requirements in r_d_requires voorkomen in r_d_per_planet met `eta` = 0 :)

Ik dacht aan een statement met ".. AND (SUBQUERY1) IN (SUBQUERY2) ..", waar SUBQUERY1 = [alle requirements voor deze rij] en SUBQUERY2 = [alle finished (`eta`=0) r_d voor planet X].
Hoe ik het op moet schrijven weet ik niet, en ik weet niet of MySQL multiple IN multiple snapt en ik kan er nergens iets over vinden en niemand weet raad.

Misschien zit ik helemaal op de foute weg, dan moet ik iets anders bedenken, maar weet iemand een oplossing voor het probleem? Hoeft niet perse met (SQ1) IN (SQ2) hoor ;)

Mijn dank is groot
Gewijzigd op 01/01/1970 01:00:00 door Rudie dirkx
 
PHP hulp

PHP hulp

05/02/2023 05:34:07
 
Rudie dirkx

rudie dirkx

13/12/2007 13:37:00
Quote Anchor link
Ih heb geprobeerd:

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
SELECT
  *
FROM
  r_d_available a
WHERE
  T = 'r' AND
  (
  SELECT
    r_d_requires_id
  FROM
    r_d_requires
  WHERE
    r_d_id = a.id
) IN (
  SELECT
    r_d_id
  FROM
    r_d_per_planet
  WHERE
    eta = 0 AND
    planet_id = $1
  )
ORDER BY
  id ASC;
$1 = X


Error: Subquery returns more than 1 row

Dus multiple IN multiple zal wel niet werken :(
Gewijzigd op 01/01/1970 01:00:00 door rudie dirkx
 
Bart van der veen

bart van der veen

13/12/2007 13:38:00
Quote Anchor link
als je niet meer dan een waarde wil in je subquery waarom werk je dan niet met limit
 
Rudie dirkx

rudie dirkx

13/12/2007 13:41:00
Quote Anchor link
Ik werk niet met een limit omdat ik juist meerdere rijen wil. Vandaar: multiple IN multiple.
Dat is het hele princiepe: 'requirements' (SUBQUERY1) kunnen er meer dan 1 zijn (maar ook 1 of 0) EN 'completed' (SUBQUERY2) kunnen er ook meer dan 1 zijn (maar ook 1 of 0).
 
Joren de Wit

Joren de Wit

13/12/2007 13:42:00
Quote Anchor link
Ik denk dat je meer op zoek bent naar zoiets:
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
SELECT
    a.id
FROM
    r_d_available AS a
WHERE
    a.id NOT IN (
        SELECT r_d_id FROM r_d_requires )
OR
    a.id IN (
        SELECT r.r_d_id
        FROM
            r_d_requires AS r
        JOIN
            r_d_per_planet AS p
                ON p.r_d_id = r.r_d_requires_id
        WHERE
            p.eta = 0 )
 
- SanThe -

- SanThe -

13/12/2007 13:45:00
Quote Anchor link
Niet Bumpen.
Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de http://www.phphulp.nl/imgs/forum/edit.gif knop om je tekst aan te passen.

SanThe.
 
Rudie dirkx

rudie dirkx

13/12/2007 13:53:00
Quote Anchor link
LOL @ Bumpen, wat een onzin. Weten we dat ook weer. Dank

Blanche, je bent helemaal geweldig!! Ten eerste petje af omdat je snapt wat ik bedoel :) En ten tweede omdat je het werkend krijgt.
Ik vond mijn query leuker ;) en het valt me tegen van MySQL dat het niet werkt, maar so be it. Nu werkt het. Heerlijk!

Enorm bedankt!!
 
Joren de Wit

Joren de Wit

13/12/2007 14:22:00
Quote Anchor link
Query was in 1x goed? Dat had ik niet verwacht :)

Maar goed, veel plezier ermee...
 



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.