Toon posts:

[(My)SQL] 3-level join-kwestie

Pagina: 1
Acties:

Verwijderd

Topicstarter
De situatie is als volgt.
Ik werk in een database model met daarin 3 relevante tabellen;
`projecten` (AS pro), `subprojecten` (AS sub), `opdrachtgevers` (AS og) met onderlinge relaties.

*klik
tabellen en relaties (.gif, 7kb groot...)

Wat ik wil bereiken;
Ik wil per opdrachtgever laten zien hoeveel `subprojecten` er gekoppeld zijn aan `projecten` van hun waarbij de status van het subproject niet verstuurd is (`sub.sub.verstuurd` = '0').
Het mooiste zou zijn als de tabel subprojecten een veld `og.og_id` bevat, maar helaas dat mocht niet zo zijn toen ik de structuur aanschouwde.. Omdat ik dus een derde tabel moet gebruiken vraag ik me af wat de slimste -en natuurlijk snelste- methode is om te bereiken wat ik wil.

Ik kan A) beginnen bij de opdrachtgevers en dan relaties leggen met de projecten/subprojecten tabellen, of ik kan B ) beginnen met de subprojecten tabel (en dan een count uitvoeren) en tevens relaties leggen met de andere twee tabellen.

Suggesties zijn van harte welkom, daar ik even niet weet wat de meest gangbare manier zou zijn.

[ Voor 18% gewijzigd door Verwijderd op 18-02-2005 10:26 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
code:
1
2
3
4
5
6
SELECT og.og_naam, COUNT(subprojecten) as aantal
FROM opdrachtgevers AS og
INNER JOIN projecten as pro ON og.og_id = pro.og_id
INNER JOIN subprojecten as sub ON pro.pr_id = sub.pr_id
WHERE sub.verstuurd = 0
GROUP BY og.og_naam

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

P_de_B schreef op vrijdag 18 februari 2005 @ 10:28:
code:
1
2
3
4
5
6
SELECT og.og_naam, COUNT(subprojecten) as aantal
FROM opdrachtgevers AS og
INNER JOIN projecten as pro ON og.og_id = pro.og_id
INNER JOIN subprojecten as sub ON pro.pr_id = sub.pr_id
WHERE sub.verstuurd = 0
GROUP BY og.og_naam
Zou ik zo doen, weet je 100% zeker dat je per opdrachtgever telt:

code:
1
2
3
4
5
6
SELECT og.og_naam, COUNT(subprojecten) as aantal
FROM opdrachtgevers AS og
INNER JOIN projecten as pro ON og.og_id = pro.og_id
INNER JOIN subprojecten as sub ON pro.pr_id = sub.pr_id
WHERE sub.verstuurd = 0
GROUP BY og.og_naam, og.og_id


Volgens de definitie is de naam van een opdrachtgever niet unique en dus is het niet gegarandeerd dat je op naam een juist onderscheid kunt maken tussen de opdrachtgevers. Ook even op og.og_id groeperen dus :)

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je hebt gelijk :)

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Ik dank u beide zeer vriendelijk, het is me dan ook gelukt met uw hulp.. Zoals vaak bij vraagstukken; als je de oplossing ziet is hij vrij gemakkelijk zelfs. Maar mijn probleem was dat ik voor het eerst te maken had met 3 niveau's. Oplossing is dus om gewoon een extra join te maken tussen de tweede en derde tabel.

De aangedragen oplossing is perfect, echter moet wel het volgende gewijzigd worden denk ik:
PHP:
1
2
3
// was: count(subprojecten)
// wordt:
count(sub.subpr_id)


Nogmaals dank.