[MySQL] Immer wieder Joins..

WhiZZler

Chancentod²
ID: 85586
L
6 Mai 2006
588
32
begrüße!

ich habe 3 tabellen..

Code:
cn_parks:
park_id | name

cn_coasters:
coaster_id | name | park_id

cn_images:
image_id | type | ref_id

aus diesen 3 tabellen möchte ich folgendes auslesen: name des parks, park_id, anzahl der coaster in dem park, anzahl der bilder zum park..

habe dafür folgenden query geschrieben:

Code:
SELECT p.park_id, p.name, COUNT( c.coaster_id ) AS num_coasters,
COUNT( i.image_id ) AS num_images
FROM cn_parks p
LEFT JOIN cn_coasters c ON c.park_id = p.park_id
LEFT JOIN cn_images i ON i.ref_id = p.park_id
GROUP BY p.id
ORDER BY p.name

zum einen bekomme ich bei diesem query für die anzahl der bilder und die anzahl der parks jeweils das produkt aus der anzahl der tatsächlichen coaster mit der tatsächlichen anzahl der bilder zum park (also 4 coaster, 2 bilder => 8 ) irgendwie komm ich nich so ganz drauf, wo sich mein denkfehler versteckt.. :-?

das 2. problem ist hierbei, dass in der gleichen tabelle für mehrere verschiedenen "kategorien" bilder gespeichert werden sollen, die über 'type' klassifiziert werden.. es wird ziemlich sicher vorkommen, dass es in der tabelle cn_images mehrere male die gleiche ref_id gibt, wobei über type zu einem anderen oberelement referenziert wird.. ich habe versucht, den query um "WHERE i.type = 'p' OR i.type = NULL" zu erweitern.. hierbei bekomme ich allerdings immer nur die parks ausgelesen, zu denen bereits bilder in der datenbank eingetragen sind..
ich überlege auch grade, ob ich das feld 'ref_id' aufsplitten soll in die verschiedenen kategorien.. also zb park_id, coaster_id, etc..und falls ein foto dann zu einem park gehört, dann bleibt bis auf das feld "park_id" der rest eben leer.. hätte auch den vorteil, dass man fotos zu mehreren kategorien referenzieren könnte..

wäre sehr dankbar für hinweise auf meine denkfehler!
mfg
whizzler
 
Problem 1: Probier mal 'n COUNT(DISTINCT column).

Problem 2: = NULL ist immer falsch - IS NULL muss es heissen.
 
tausend dank! kann so einfach sein :)
anscheinend doch schon ne ecke her, dass ich mich richtig mit solchen sachen auseinandergesetzt habe ;)