Hallo Bernd,
okay, so bekommst Du alle Projekte, die Bilder haben. Die Anzahl fehlt.
Aber warum jetzt ein neuer Ansatz? Du warst doch schon fast am Ziel. Es fehlte nur ein dummes, kleines Komma. Ich dachte, mein kommafreier Satz hätte Dich drauf gebracht.
SELECT p_code, p_titel, p_von, p_bis (SELECT COUNT(*) FROM projektbilder WHERE bild_refID = p_code ) as anz_bilder FROM projekte
Was inhaltlich noch fehlt, ist die Begrenzung auf Projekte mit Bildern.
MYSQL erlaubt Dinge, die sonst nirgends gehen. Darum weiß ich nicht, ob man eine Subselect-Spalte in einer WHERE Bedingung verwenden darf. MS SQL Server erlaubt es nicht. Also dies hier:
SELECT p_code, p_titel, p_von, p_bis,
(SELECT COUNT(*) FROM projektbilder
WHERE bild_refID = p_code ) as anz_bilder
FROM projekte
WHERE anzahl > 0
Wenn MySQL das erlaubt, wäre es das, was Du brauchst. Denke ich.
Wenn nicht - normgerechteres SQL sähe so aus:
SELECT *
FROM (SELECT p_code, p_titel, p_von, p_bis,
(SELECT COUNT(*) FROM projektbilder
WHERE bild_refID = p_code ) as anz_bilder
FROM projekte) X
WHERE anzahl > 0
Alternativ mit einem Inner Join, das ist das gleiche wie ein LEFT JOIN bei dem man abfragt ob keine Sätze zugemischt wurden:
SELECT p_code, p_titel, p_von, p_bis, COUNT(*)
FROM projekte P JOIN projektbilder B ON B.bild_refID = P.p_code
GROUP BY p_code, p_titel, p_von, p_bis
In MYSQL reicht es, p_code ins GROUP BY zu schreiben, sofern es zu einem p_code nur einen Satz in der projekte-Tabelle gibt. Normgerechtere DBs verlangen, dass alle SELECT-Spalten, die nicht aggregiert werden, im GROUP BY gelistet sind und damit auch an der Gruppierung teilnehmen (was bei eindeutigem p_code zum gleichen Ergebnis führt).
Rolf
sumpsi - posui - clusi