Query over 4 tabellen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthijs

matthijs

24/08/2007 00:16:00
Quote Anchor link
Beste mensen,

Ik zit met het volgende probleem:

Ik heb 4 tabellen zonder primary keys (kan ik ook niet maken vanwege meerdere dezelfde waarden):

Tabel | Kolom | niet van toepassing
-----------------------------------------------------------------
SAST | RID en SID | en nog meer kolommen
RAST | RID en Telefoon | en nog meer kolommen
MAST | RID en CID | en nog meer kolommen
CAST | CID en Naam | en nog meer kolommen

In SAST heb ik een kolom RID die matched met een RID uit MAST en een RID uit RAST.
In RAST heb ik een kolom RID die matched met een RID uit MAST.
In MAST heb ik een kolom RID en CID
In CAST heb ik een kolom CID die matched met een CID uit MAST.

Uiteraard staan er nog meerdere kolommen met gegevens in iedere tabel, maar dit zijn degene die een overeenkomst hebben.

Nu wil een query trekken op RID uit SAST en daarmee via MAST meerdere gegevens ophaald uit CAST (naam) en uit RAST (telefoon)

Ik heb dan ook de volgende query die wel werkt maar hij is mega traag: 18 sec

Weet iemand hoe dit komt? Is de query echt zo brak of?

Tot nu toe kan ik met de volgende query gegevens ophalen uit alle 4 de tabellen:

SELECT SAST.SID, SAST.RID, CAST.Name, RAST.Telefoon
FROM SAST INNER JOIN

((CAST INNER JOIN MAST ON CAST.CID = MAST.CID)
INNER JOIN RAST ON MAST.RID = RAST.RID)

ON SAST.RID = RAST.RID ORDER BY SAST.SID

Kan iemand me helpen?

Alvast bedankt

Gr,

Matthijs
Gewijzigd op 01/01/1970 01:00:00 door Matthijs
 
PHP hulp

PHP hulp

28/11/2024 18:08:16
 
Robert Deiman

Robert Deiman

24/08/2007 00:24:00
Quote Anchor link
Zoals ik je query nu lees is de opbouw ook niet helemaal goed, kijk ff in de tut op de pagina voor "meerdere JOINS in 1 query".
http://www.phphulp.nl/php/tutorials/3/479/
 
Frank -

Frank -

24/08/2007 02:04:00
Quote Anchor link
Wanneer 'RID en SID' en bv. 'RID en Telefoon' in 1 kolom staan, dan is het datamodel niet goed. Meerdere gegevens zet je namelijk in meerdere records en niet samen in 1 record. Dat levert altijd (een hele berg) problemen op.

Ga normaliseren, dat lost de problemen op en/of maakt de oplossing vele malen eenvoudiger. Om te beginnen met de pk's.
 
Matthijs

matthijs

24/08/2007 09:34:00
Quote Anchor link
Hoi Frank,

Even ter opheldering:
RID en Telefoon staan niet in 1 kolom maar apart:
Heb het niet duidelijk neergezet:

Tabel | Kolom1 | Kolom2 | en nog meer kolommen
-----------------------------------------------------------------
SAST | RID | SID | en nog meer kolommen
RAST | RID | Telefoon | en nog meer kolommen
MAST | RID | CID | en nog meer kolommen
CAST | CID | Name | en nog meer kolommen

SELECT SAST.SID, SAST.RID, CAST.Name, RAST.Telefoon
FROM SAST INNER JOIN

((CAST INNER JOIN MAST ON CAST.CID = MAST.CID)
INNER JOIN RAST ON MAST.RID = RAST.RID)

ON SAST.RID = RAST.RID ORDER BY SAST.SID

Gr,

Matthijs
 
Robert Deiman

Robert Deiman

24/08/2007 09:43:00
Quote Anchor link
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
<?php
$query
= "SELECT
        s.SID,
        s.RID,
        c.Name,
        r.Telefoom
    FROM
        SAST AS s
    INNER JOIN
                (CAST AS c
            INNER JOIN
                    (MAST AS m
                INNER JOIN
                    RAST AS r
                    ON
                     m.RID = r.RID)
            ON
                 m.CID = c.CID)
    ON
        s.SID =c.CID"

?>


Gaat die zo sneller?
 
Matthijs

matthijs

24/08/2007 10:52:00
Quote Anchor link
SELECT s.SID,
s.RID,
c.Name,
r.Telefoom
FROM
SAST AS s
INNER JOIN
(CAST AS c
INNER JOIN
(MAST AS m
INNER JOIN
RAST AS r
ON
m.RID = r.RID)
ON
m.CID = c.CID)
ON
s.SID =c.CID


Hmm net geprobeerd en hij komt vreemd genoeg met de melding:

#1054 - Unknown column 's.SID' in 'field list'

Er is toch wel degelijk een SID onder SAST
 
Robert Deiman

Robert Deiman

24/08/2007 10:59:00
Quote Anchor link
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
<?php
$query
= "SELECT
        s.SID,
        s.RID,
        c.Name,
        r.Telefoom
    FROM
        SAST AS s
    INNER JOIN
                (CAST AS c
            INNER JOIN
                    (MAST AS m
                INNER JOIN
                    RAST AS r
                    ON
                     m.RID = r.RID)
            ON
                 m.CID = c.CID)
    ON
        s.SID =c.SID"

?>


Ik had sowiezo nog een klein foutje (moest niet c.CID zijn aan het eind, maar c.SID), maar zoals deze query is geschreven is wel zoals je met de JOINS moet werken. Hoe het kan dat die de kolom niet kent onder SAST snap ik nog niet.
 



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.