Sql query met koppeltabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Trinco ingels

trinco ingels

07/01/2013 00:00:57
Quote Anchor link
Goedenavond,

Ik ziet hier met een probleem waar ik dus niet uitkom.

Ik heb hier mijn database:

WEDSTRIJD:
WedstrijdID, Datum, Tijd, Veld
1, 2012-05-06, 19:50, 4

ROL (koppeltabel):
WEDSTRIJD_WedstrijdID, TEAM_TeamID, Rol
1, 1, TeamA
1, 2, TeamB
1, 3, Scheids

Team:
TeamID, Clubnaam, Website, Klasse
1, Club a, www.a.nl, 1e klasse
2, Club b, www.b.nl, 1e klasse
3, Club c, www.c.nl, 1e klasse

Nu wat ik uit de database moet krijgen is het volgende overzicht:
W_ID TIJD VELD KLAS TEAM1 TEAM2 SCHEIDS
------------------------------------------------------------------------------------
1 19.50 4 1Klas Club a/Club b Club 3

Ik krijg dit tot zover niet voor elkaar..

Wel met de volgende query kom ik een eind maar niet het gewenste resultaat ik hoop dat iemand mij vooruit kan helpen

SELECT WedstrijdID,
Tijd,
Veld,
Klasse,
T.ClubNaam,
Rol
FROM `wedstrijd` AS W,
`rol` as R,
`team` as T,
`klas` as K
WHERE R.WEDSTRIJD_WedstrijdID = W.WedstrijdID
AND R.TEAM_TeamID = T.TeamID
AND T.KLAS_KlasID = K.KlasID

Bedankt!
 
PHP hulp

PHP hulp

01/12/2024 10:18:01
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/01/2013 09:58:03
Quote Anchor link
Dat komt omdat je teveel tabellen gebruikt. Je maakt het jezelf moeilijk door die rollen tabel.
Een voorbeldje uit een van mijn projectjes:
match_schedule:
- match_id
- match_date
- match_time
- home_team
- away_team
- home_score
- away_score

teams
- team_id
- team_name

Met deze querie haal ik dan de wedstrijden op:
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
SELECT
    m.match_date,
    m.match_time,
    h.team_name home_team,
    a.team_name away_team
FROM
    match_schedule m
INNER JOIN
    teams h
    ON m.home_team = h.team_id
INNER JOIN
    teams a
    ON a.away_team = a.team_id
WHERE home_score IS NULL
 
Trinco ingels

trinco ingels

07/01/2013 15:23:37
Quote Anchor link
Bedankt voor je reactie maar ik heb daar gekozen voor een koppeltabel wat mij handig leek.

Ondertussen is het opgelost met de volgende query
SELECT WedstrijdID AS W_ID,
Tijd AS TIJD,
Veld AS VELD,
(SELECT Afkorting FROM `klas` WHERE KlasID IN
(SELECT KLAS_KlasID FROM `team` WHERE TeamID IN
(SELECT TEAM_TeamID FROM `rol` WHERE WEDSTRIJD_WedstrijdID = wedstrijd.WedstrijdID AND Rol = 'TeamA'))) AS KLAS,

(SELECT ClubNaam FROM team WHERE TeamID IN (SELECT TEAM_TeamID FROM rol WHERE WEDSTRIJD_WedstrijdID = wedstrijd.WedstrijdID AND Rol = 'TeamA')) AS TEAM1,
(SELECT ClubNaam FROM team WHERE TeamID IN (SELECT TEAM_TeamID FROM rol WHERE WEDSTRIJD_WedstrijdID = wedstrijd.WedstrijdID AND Rol = 'TeamB')) AS TEAM2,
(SELECT ClubNaam FROM team WHERE TeamID IN (SELECT TEAM_TeamID FROM rol WHERE WEDSTRIJD_WedstrijdID = wedstrijd.WedstrijdID AND Rol = 'Scheidsrechter')) AS `SCHEIDSR-TELLER`

FROM `wedstrijd`
 
Erwin H

Erwin H

07/01/2013 15:54:34
Quote Anchor link
Kan je jezelf ook nog uitleggen waarom je het met een koppeltabel hebt gedaan en waarom dat handiger is dan zonder? Hoeft aan ons niet, maar als je zelf geen reden meer weet, is het misschien toch niet zo verstandig.

Dan over je query..... dat moet je echt niet zo doen. Dat gaat een echte draak van een query worden die verschrikkelijk langzaam gaat zijn. Als je relaties tussen tabellen legt en daar gegevens uit moet hebben, dan doe je dat over het algemeen met joins. Zie het voorbeeld van Ger. Zoals jij het nu doet betekent het (als ik goed tel) 9 subqueries en als je het over een overzicht hebt van 10 wedstrijden dan zal je 90 subqueries uitvoeren.... dat is werkelijk niet houdbaar.
 



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.